2017-04-25 98 views
3

我想在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環境?

在編寫這本書的時候,其實不然。

回答

3

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

相關問題