gpt4 book ai didi

python - 如何在 AWS Lambda 函数中使用 gnupg

转载 作者:行者123 更新时间:2023-12-05 00:53:27 27 4
gpt4 key购买 nike

我有一个 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)

当我将此文件作为 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)

我的 AWS Lambda 代码 zip 在 AWS 中创建了一个文件夹结构 enter image description here

我在运行时看到的错误是 [ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'gnupg'Traceback(最近一次通话最后一次):

最佳答案

您可以从 GnuPG 1.4 source 创建适合 AWS Lambda 上的 python-gnupg 使用的 gpg 二进制文件。 .你需要

  • GCC 和相关工具(sudo yum install -y gcc make glibc-static on Amazon Linux 2)
  • 压缩

下载 GnuPG 源包并验证其签名后,使用构建二进制文件

$ tar xjf gnupg-1.4.23.tar.bz2
$ cd gnupg-1.4.23
$ ./configure
$ make CFLAGS='-static'
$ cp g10/gpg /path/to/your/lambda/

您还需要 python-gnupg 中的 gnupg.py 模块,您可以使用 pip 获取该模块:

$ cd /path/to/your/lambda/
$ pip install -t . python-gnupg

您的 Lambda 的源结构现在看起来像这样:

.
├── gnupg.py
├── gpg
└── lambda_function.py

更新您的函数以将 gpg 二进制文件的位置传递给 python-gnupg 构造函数:

gpg = gnupg.GPG(gnupghome='/.gnupg', gpgbinary='./gpg')

使用zip打包Lambda函数:

$ chmod o+r gnupg.py lambda_function.py 
$ chmod o+rx gpg
$ zip lambda_function.zip gnupg.py gpg lambda_function.py

关于python - 如何在 AWS Lambda 函数中使用 gnupg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67782720/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com