![](/img/trans.png)
[英]How can I upload a 'file' to S3 by creating a temp file, using AWS Lambda?
[英]How can I push AWS CodeCommit to S3 using Lambda?
Python是我的首選語言,但Lambda支持的任何語言都可以。 - 所有AWS架構 -
我在S3中有Prod,Beta和Gamma分支以及相應的文件夾。 我正在尋找一種方法讓Lambda響應CodeCommit觸發器並基於觸發它的分支,克隆repo並將文件放在適當的S3文件夾中。
我試圖利用GitPython,但它不起作用,因為Lambda沒有在基礎Lambda AMI上安裝Git,而GitPython依賴它。
我還瀏覽了Boto3文檔,只有監管任務可用; 它無法返回項目文件。
感謝您的幫助!
最新版本的boto3 codecommit
包括方法get_differences
和get_blob
。 您可以使用這兩種方法獲取codecommit存儲庫的所有內容(至少,如果您對保留.git歷史記錄不感興趣)。
下面的腳本獲取主分支的所有內容並將其添加到tar文件中。 之后你可以把它上傳到s3。 您可以將其作為lambda函數運行,可以在推送到codecommit時調用它。
這適用於當前的lambda python 3.6環境 。 botocore==1.5.89
boto3==1.4.4
import boto3
import pathlib
import tarfile
import io
import sys
def get_differences(repository_name, branch="master"):
response = codecommit.get_differences(
repositoryName=repository_name,
afterCommitSpecifier=branch,
)
differences = []
while "nextToken" in response:
response = codecommit.get_differences(
repositoryName=repository_name,
afterCommitSpecifier=branch,
nextToken=response["nextToken"]
)
differences += response.get("differences", [])
else:
differences += response["differences"]
return differences
if __name__ == "__main__":
repository_name = sys.argv[1]
codecommit = boto3.client("codecommit")
repository_path = pathlib.Path(repository_name)
buf = io.BytesIO()
with tarfile.open(None, mode="w:gz", fileobj=buf) as tar:
for difference in get_differences(repository_name):
blobid = difference["afterBlob"]["blobId"]
path = difference["afterBlob"]["path"]
mode = difference["afterBlob"]["mode"] # noqa
blob = codecommit.get_blob(
repositoryName=repository_name, blobId=blobid)
tarinfo = tarfile.TarInfo(str(repository_path / path))
tarinfo.size = len(blob["content"])
tar.addfile(tarinfo, io.BytesIO(blob["content"]))
tarobject = buf.getvalue()
# save to s3
看起來像LambCI完全是你想要的。
不幸的是,目前CodeCommit沒有用於將存儲庫上傳到S3存儲桶的API。 但是,如果您願意嘗試使用CodePipeline,則可以將AWS CodePipeline配置為使用AWS CodeCommit存儲庫中的分支作為代碼的源階段。 這樣,當您在CodePipeline中對所選跟蹤分支進行更改時,該分支頂端的存儲庫存檔將傳遞到您的CodePipelie存儲桶。 有關CodePipeline的更多信息,請參閱以下鏈接: http ://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-simple-codecommit.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.