Som*_*Guy 3 python gnupg amazon-s3 aws-lambda python-3.8
我有一个 GPG 加密文件的本地 python 代码。一旦将文件添加到触发此 lambda 的 AWS S3,我需要将其转换为 AWS Lambda。
我的本地代码
import os
import os.path
import time
import sys
gpg = gnupg.GPG(gnupghome='/home/ec2-user/.gnupg')
path = '/home/ec2-user/2021/05/28/'
ptfile = sys.argv[1]
with open(path + ptfile, 'rb')as f:
status = gpg.encrypt_file(f, recipients=['user@email.com'], output=path + ptfile + ".gpg")
print(status.ok)
print(status.stderr)
Run Code Online (Sandbox Code Playgroud)
当我将此文件作为python3 encrypt.py file.csv执行并且结果为file.csv.gpg时,效果非常好
我试图将其移至 AWS Lambda 并在 file.csv 上传到 S3 时调用。
import json
import urllib.parse
import boto3
import gnupg
import os
import os.path
import time
s3 = boto3.client('s3')
def lambda_handler(event, context):
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
try:
gpg = gnupg.GPG(gnupghome='/.gnupg')
ind = key.rfind('/')
ptfile = key[ind + 1:]
with open(ptfile, 'rb')as f:
status = gpg.encrypt_file(f, recipients=['email@company.com'], output= ptfile + ".gpg")
print(status.ok)
print(status.stderr)
Run Code Online (Sandbox Code Playgroud)
我的 AWS Lambda 代码 zip 在 AWS 中创建了文件夹结构

我在运行时看到的错误是[ERROR] Runtime.ImportModuleError: 无法导入模块 'lambda_function': 没有名为 'gnupg' 的模块 Traceback (最近一次调用最后):
您可以从GnuPG 1.4 源gpg创建一个适合 AWS Lambda 上的 python-gnupg 使用的二进制文件。你会需要
sudo yum install -y gcc make glibc-static在 Amazon Linux 2 上)下载 GnuPG 源码包并验证其签名后,使用以下命令构建二进制文件
\n$ tar xjf gnupg-1.4.23.tar.bz2\n$ cd gnupg-1.4.23\n$ ./configure\n$ make CFLAGS=\'-static\'\n$ cp g10/gpg /path/to/your/lambda/\nRun Code Online (Sandbox Code Playgroud)\n您还需要gnupg.pypython-gnupg 中的模块,您可以使用 pip 获取该模块:
$ cd /path/to/your/lambda/\n$ pip install -t . python-gnupg\nRun Code Online (Sandbox Code Playgroud)\n您的 Lambda\xe2\x80\x99s 源结构现在看起来像这样:
\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gnupg.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gpg\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 lambda_function.py\nRun Code Online (Sandbox Code Playgroud)\n更新您的函数以传递gpg给 python-gnupg 构造函数:
gpg = gnupg.GPG(gnupghome=\'/.gnupg\', gpgbinary=\'./gpg\')\nRun Code Online (Sandbox Code Playgroud)\n用于zip打包 Lambda 函数:
$ chmod o+r gnupg.py lambda_function.py \n$ chmod o+rx gpg\n$ zip lambda_function.zip gnupg.py gpg lambda_function.py \nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
10736 次 |
| 最近记录: |