问题描述
我正在尝试使用 lambda 函数来解密进入 S3 的文件,我下载文件没有问题,但是当我尝试解密它们时,找不到 gpg。我曾尝试同时使用 python-gnupg
和 gnupg
,但都没有提到 gnupg 在操作系统上不可用。下面是我在 python 中对 GPG 进行实例化的代码
它适用于 python 3.7,但如果我升级到 3.8,Lambda 使用 AMazon Linux 2,它不附带 gpg。我如何让它在 Lambda 中与 python 3.8 一起工作?
gpg = gnupg.GPG(gnupghome='/tmp')
错误:
OSError: Unable to run gpg (gnupg) - it may not be available
我发现的所有示例似乎都没有做任何额外的事情。我正在为我的函数打包 python-gnugp 包和所有其他 python 包
Lambda 中是否提供 gpg 二进制文件?我怎样才能做到这一点?
解决方法
您必须捆绑 gpg 二进制文件及其依赖项并在您的包中交付它们。在我的包中,我将它们捆绑到一个名为“gpg”的文件夹中,然后当我在我的 Lambda 函数中使用 gpg 时,我会这样做:
def lambda_handler(event,context):
old = os.environ.get("LD_LIBRARY_PATH")
if old:
os.environ["LD_LIBRARY_PATH"] = "./gpg" + ":" + old
else:
os.environ["LD_LIBRARY_PATH"] = "./gpg"
gpg = gnupg.GPG(gnupghome='/tmp',gpgbinary='./gpg/gpg2',verbose=False)