如何在AWS Lambda Python 3.6环境中运行aws-cli?

问题描述:

我想在AWS Lambda函数中使用运行时版本的Python 3.6调用aws s3 sync命令。我怎样才能做到这一点?如何在AWS Lambda Python 3.6环境中运行aws-cli?

你为什么不只是使用包括boto3 SDK?

Architecturally this doesn't make sense!

的文件的mime类型推测

对于我的使用情况下,我觉得很有道理建筑和财政,但我接受的替代品。 My Lambda function

  • 下载Git和雨果
  • 下载my repository
  • 运行雨果产生我的小(< 100页)网站
  • 上传生成的文件到S3

眼下,我可以在大约1-2秒内在1536 MB(最强大的)Lambda函数上完成上述所有操作。这个功能只有在我改变我的网站时才会触发,所以运行起来很便宜。

也许它已经被安装在lambda环境?

在编写这本书的时候,其实不然。

Running aws-cli Commands Inside An AWS Lambda Function

import subprocess 
command = ["./aws", "s3", "sync", "--acl", "public-read", "--delete", 
      source_dir + "/", "s3://" + to_bucket + "/"] 
print(subprocess.check_output(command, stderr=subprocess.STDOUT)) 

的AWS CLI没有安装在默认情况下LAMBDA,所以你必须把它列入您的部署。尽管运行在Python 3.6 Lambda环境中,但Python 2.7仍然可用于该环境中,因此the article中概述的方法将继续有效。

要试验Lambda系统,请看lambdash

+0

不幸的是,这个帖子中的方法在这种情况下不起作用。我会在我的问题上详细阐述我已经尝试了什么。 AWS CLI仍未安装在Python Lambda实例上,尽管我还没有尝试其他环境。 – pjgranahan

+1

引用的文章显示了如何使用Lambda函数打包AWS CLI。 –

+0

谢谢你的帮助约翰。你的评论促使我重新审视这篇文章,并利用博客的方法开展工作。我做了两件关键的事情,其他人应该注意: 1)我试图在亚马逊Linux上构建aws-cli以努力匹配Lambda环境。这失败了奇怪的PyYaml错误,但在Ubuntu上构建完美无缺。 2)我没有意识到Python 2.7在Python 3.6 Lambda环境中仍然可用,并且我试图将博客中给出的脚本改编为Python 3.6。我认为这种方法最终可能奏效,但我现在已经放弃了。 – pjgranahan