如何在 AWS Glue 中使用 Crypto.Cipher AES?
How to use Crypto.Cipher AES in AWS Glue?
我目前在我的 AWS lambda 函数中使用取自 https://github.com/Doerge/awslambda-pycrypto 的模块 Crypto.Cipher AES
,它非常适合我的情况。
from Crypto.Cipher import AES
from botocore.vendored import requests
url = 'my_url'
PARAMS = {'param1':'val1', 'param2':'val2'}
CIPHER_KEY = 'cipher_key'
req = requests.get(url, params = PARAMS).json()
ciphered_value = r['ciphered_value']
decipher = AES.new(CIPHER_KEY, AES.MODE_ECB)
value = decipher.decrypt(ciphered_value)
但是,由于需要处理的值数量超过了 15 分钟的限制,Lambda 失败了
我正在尝试 运行 一项 AWS Glue Python Shell 工作,该工作 运行 与 Glue 完全相同的代码可以持续超过 15 分钟加上给出我可以访问其他资源和 AWS Data Catalogue。
但是,当我 运行 我的工作时,出现以下错误:
Traceback (most recent call last):
File "/tmp/runscript.py", line 115, in <module>
runpy.run_path(temp_file_path, run_name='__main__')
File "/usr/local/lib/python3.6/runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File "/usr/local/lib/python3.6/runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "/usr/local/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/tmp/glue-python-scripts-87edl8q9/playlist_ingestor_glue.py", line 10, in <module>
ModuleNotFoundError: No module named 'Crypto'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/tmp/runscript.py", line 134, in <module>
raise e_type(e_value).with_tracsback(new_stack)
AttributeError: 'ModuleNotFoundError' object has no attribute 'with_tracsback'
很明显,它无法读取加密模块。
ModuleNotFoundError: 没有名为 'Crypto'
的模块
我关注了这个:
https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-libraries.html
还有这个:
https://docs.aws.amazon.com/glue/latest/dg/add-job-python.html#create-python-egg-library
并添加了包含以下内容的 setup.py
文件:
from setuptools import setup
setup(
name="Crypto",
version="0.1",
packages=['Crypto']
并将 Crypto
目录 + setup.py
文件的内容压缩到我上传到 S3 并在我的 Glue 作业的 Python library path
中引用的 zip 文件 pycrypto.zip
.
所有这些之后,我仍然收到错误。
我 运行 我的脚本使用了以下组合但没有结果:
from Crypto.Crypto.Cipher import AES
from Crypto.Cipher import AES
from Cipher import AES
在 AWS Glue 中使用此编译模块的正确方法是什么?我发现它令人沮丧,因为兼容的 python 库非常有限,而且还没有很多示例、文档或社区帖子来解释如何实现这一点。
找到这个问题
建议使用这个:
import os
import site
from setuptools.command import easy_install
install_path = os.environ['GLUE_INSTALLATION']
easy_install.main( ["--install-dir", install_path, "<library-name>"] )
reload(site)
import <installed library>
所以我使用了 https://pypi.org/project/pycrypto/#files
的最新版本
import os
import site
from setuptools.command import easy_install
install_path = os.environ['GLUE_INSTALLATION']
easy_install.main( ["--install-dir", install_path, "https://files.pythonhosted.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz"] )
reload(site)
它正在运行!
不过,我想知道如何将它用作引用的 python 库。
我目前在我的 AWS lambda 函数中使用取自 https://github.com/Doerge/awslambda-pycrypto 的模块 Crypto.Cipher AES
,它非常适合我的情况。
from Crypto.Cipher import AES
from botocore.vendored import requests
url = 'my_url'
PARAMS = {'param1':'val1', 'param2':'val2'}
CIPHER_KEY = 'cipher_key'
req = requests.get(url, params = PARAMS).json()
ciphered_value = r['ciphered_value']
decipher = AES.new(CIPHER_KEY, AES.MODE_ECB)
value = decipher.decrypt(ciphered_value)
但是,由于需要处理的值数量超过了 15 分钟的限制,Lambda 失败了
我正在尝试 运行 一项 AWS Glue Python Shell 工作,该工作 运行 与 Glue 完全相同的代码可以持续超过 15 分钟加上给出我可以访问其他资源和 AWS Data Catalogue。
但是,当我 运行 我的工作时,出现以下错误:
Traceback (most recent call last):
File "/tmp/runscript.py", line 115, in <module>
runpy.run_path(temp_file_path, run_name='__main__')
File "/usr/local/lib/python3.6/runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File "/usr/local/lib/python3.6/runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "/usr/local/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/tmp/glue-python-scripts-87edl8q9/playlist_ingestor_glue.py", line 10, in <module>
ModuleNotFoundError: No module named 'Crypto'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/tmp/runscript.py", line 134, in <module>
raise e_type(e_value).with_tracsback(new_stack)
AttributeError: 'ModuleNotFoundError' object has no attribute 'with_tracsback'
很明显,它无法读取加密模块。
ModuleNotFoundError: 没有名为 'Crypto'
的模块我关注了这个:
https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-libraries.html
还有这个:
https://docs.aws.amazon.com/glue/latest/dg/add-job-python.html#create-python-egg-library
并添加了包含以下内容的 setup.py
文件:
from setuptools import setup
setup(
name="Crypto",
version="0.1",
packages=['Crypto']
并将 Crypto
目录 + setup.py
文件的内容压缩到我上传到 S3 并在我的 Glue 作业的 Python library path
中引用的 zip 文件 pycrypto.zip
.
所有这些之后,我仍然收到错误。
我 运行 我的脚本使用了以下组合但没有结果:
from Crypto.Crypto.Cipher import AES
from Crypto.Cipher import AES
from Cipher import AES
在 AWS Glue 中使用此编译模块的正确方法是什么?我发现它令人沮丧,因为兼容的 python 库非常有限,而且还没有很多示例、文档或社区帖子来解释如何实现这一点。
找到这个问题
建议使用这个:
import os
import site
from setuptools.command import easy_install
install_path = os.environ['GLUE_INSTALLATION']
easy_install.main( ["--install-dir", install_path, "<library-name>"] )
reload(site)
import <installed library>
所以我使用了 https://pypi.org/project/pycrypto/#files
的最新版本import os
import site
from setuptools.command import easy_install
install_path = os.environ['GLUE_INSTALLATION']
easy_install.main( ["--install-dir", install_path, "https://files.pythonhosted.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz"] )
reload(site)
它正在运行!
不过,我想知道如何将它用作引用的 python 库。