我有一个本地的Python代码,用GPG加密文件。我需要将其转换为AWS Lambda,一旦文件被添加到触发此Lambda的AWS S3中。
我的本地代码
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)
当我执行python3 encrypt.py file.csv时,它的效果非常好,结果是file.csv.gpg。
我正在尝试将其移植到AWS Lambda,并在上传到S3的file.csv文件时调用。
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)
我的AWS Lambda代码压缩包在AWS中创建了一个文件夹结构。
![在这里输入图片描述](https://istack.dev59.com/cd2qx.webp)
gnupg
库。进程所需的任何文件(例如私钥)都需要包含在Zip中或从S3下载。 - John Rotensteingnupg
库不是标准的 Python 库。它需要被包含在 部署包 中,以便 Python 可以使用该库(而不仅仅是您的.gnupg
目录)。这与尝试在没有安装gnupg
的新计算机上运行程序的情况相同--您需要使用pip
安装它。对于 Lambda 函数,您需要在虚拟环境中进行该安装,然后按照我之前的评论中提供的说明将结果打包成 zip 文件。 - John Rotenstein