【发布时间】: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