【问题标题】:Struggling to run awscli in Lambda努力在 Lambda 中运行 awscli
【发布时间】:2023-02-24 07:36:03
【问题描述】:

我将我的 lambda 打包为:

pip3 install -r requirements.txt -t ./dependencies
cd dependencies
cp bin/aws .
sed -i -e '1 s/.*/#!\/var\/lang\/bin\/python/' aws
zip -r ../lambda.zip .
cd ..
zip lambda.zip app.py
$ cat requirements.txt
awscli
$ cat app.py
import subprocess


def handler(event, context):
    command = ['aws', 'help']
    output = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    print(output)

我可以确认 aws 位于包的顶层,并且第一行已替换为 #!/var/lang/bin/python

现在,问题是,如果以这种方式启动函数,它会为 aws 报告 FileNotFound 错误。如果我使用 ./aws 而不是 aws,它就会超时。

那么,可能出了什么问题?

PS:我对诸如为什么不使用 boto3 之类的答案不感兴趣。我想解决这个在 Lambda 中运行 awscli 的特殊问题。

PS2:我对使用容器也不感兴趣。这是另一种解决方法,但我确实想解决我遇到的问题,而不是遵循其他替代方法。

【问题讨论】:

  • 为什么要尝试运行 CLI 命令而不是使用 boto?
  • 应该不需要从 AWS Lambda 函数调用 AWS CLI。相反,使用原生 AWS SDK(例如 Boto3 用于 Python)直接调用 AWS 服务。事实上,AWS CLI 是用 Python 编写的,并使用 boto3 本身!
  • @JohnRotenstein 你猜怎么着? AWS CLI 是用 Python 编写的,使用 boto3,甚至需要 AWS CLI 本身来执行一些操作!。说真的,坚持这个问题,如果你不知道答案,就不要添加虚假消息,尤其是当我警告过你的时候。
  • @MarkB 实际上,我有一个具体问题,正文中提供了所有必需的详细信息。如果这不是你想要的问题,因为你不知道答案,因此你没有得到宝贵的分数,那就继续前进,进入下一个问题。但试图将注意力转移到另一个问题并不是这里的目标。
  • 与 AWS Lambda 函数关联的安全组的配置是什么? Lambda 函数是否连接到 VPC,如果是,是否有特殊原因为什么它是连接的?

标签: python amazon-web-services aws-lambda aws-cli


【解决方案1】:

好吧,我发现发生了什么事。

默认情况下,Lambda 创建时有 3 秒的超时,但代码花费的时间更长,因此这就是调用 ./aws 时报告超时的原因。

【讨论】:

    【解决方案2】:

    带有 Python 运行时的 Lambda 已经包含了 Boto3。 Boto3 是用于与 AWS 服务交互的 Python 库。

    以下是在 Lambda 函数中使用 Boto3 的简单示例:

    import boto3
    
    s3_client = boto3.client('s3')
    
    def lambda_handler(event, context):
    
       # List S3 buckets
       response = s3_client.list_buckets()
    

    【讨论】:

    • 我已经使用 boto3 开发了数十个应用程序,我知道如何使用 boto3 谢谢。但正如我所说,我对这个解决方案不感兴趣。
    猜你喜欢
    • 2018-01-18
    • 2019-04-24
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2015-11-13
    相关资源
    最近更新 更多