【问题标题】:Calling GPG method from AWS serverless从 AWS 无服务器调用 GPG 方法
【发布时间】:2023-03-28 17:44:01
【问题描述】:

我使用 zip method 部署我的无服务器功能。

我正在尝试使用以下代码加密文件:

import boto3
import gnupg

def lambda_handler(event, context):
        s3=boto3.resource('s3')

        s3.meta.client.download_file('my_bucket','plain.txt','/tmp/plain.txt')
        s3.meta.client.download_file('my_bucket','public.key','/tmp/public.key')
        
        key_data = open('/tmp/public.key').read()

        gpg = gnupg.GPG('/tmp')
        priv_key = gpg.import_keys(key_data)
        
        with open('/tmp/plain.txt','rb') as a_file:
          gpg.encrypt_file(a_file,key_data,output='plain.txt.gpg')
     
        return 'ok'

但我收到以下错误:

  "errorMessage": "Unable to run gpg (/tmp) - it may not be available."

从无服务器运行 gpg 的正确方法是什么?

【问题讨论】:

  • 您究竟是如何使用 .zip 文件导入库的?究竟是什么错误?生成的文件夹结构是什么?
  • 我在您的评论@gshpychka 之后更新了问题
  • 您是如何将依赖项打包到 zip 文件中的?生成的文件夹结构是什么?

标签: python-3.x aws-lambda boto3 gnupg python-gnupgp


【解决方案1】:

Lambda 运行时不包含像 GPG 这样的任意可执行文件。

您最好的选择可能是使用本机 Python 包,因此理想情况下您不需要外部二进制文件或包装器包,例如 python-gnupg

您可能需要将所需的二进制文件与您的 Lambda 部署包一起打包或作为底层 Lambda 层的一部分。

【讨论】:

    猜你喜欢
    • 2020-03-04
    • 2018-08-06
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    相关资源
    最近更新 更多