amazon-web-services - codecommit文件如何自动上传到s3?
问题描述
下面的代码只给了我改变的字节,而不是整个文件。来到 s3 部分,zip 文件正在创建,但大小为零字节,而实际大小约为 70-80 字节。我需要一种方法,当推送事件发生时,存储库中的所有文件都将被推送到 s3。至少告诉我在推送发生时如何从存储库中获取所有文件。
提前致谢!
import boto3
import pathlib
import tarfile
import io
import sys
import os
codecommit = boto3.client("codecommit")
def get_differences(repository_name, branch="master"):
response = codecommit.get_differences(
repositoryName=repository_name,
afterCommitSpecifier='master',
)
differences = []
while "nextToken" in response:
response = codecommit.get_differences(
repositoryName=repository_name,
afterCommitSpecifier='master',
nextToken=response["nextToken"]
)
differences += response.get("differences", [])
else:
differences += response["differences"]
return differences
def main(event,context):
repository_name = event['Records'][0]['eventSourceARN'].split(':')[5]
repository_path = pathlib.Path(repository_name)
buf = io.BytesIO()
with tarfile.open(None, "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
s3 = boto3.client('s3')
s3.filename = str(repository_name)
s3.bucket = 'csharp-codes-codecommit'
response = s3.put_object(Bucket=s3.bucket,Key= '/tmp/'+str(repository_path))
解决方案
s3.put_object()
从您的代码来看,您的调用似乎没有附加您的 tar 文件。
另一个解决方案是位于此处的 CodeCommit 的无服务器示例。最后一个将在每次推送后创建一个 zip 存档。
推荐阅读
- javascript - 通过事件监听器切换/显示图像
- python - 为什么 tensorflow 仍然看不到我的 GPU?
- c# - Visual Studio c#,使用 .Image 属性由于某种原因引发错误
- python - 用 Python 附加的多维 numpy 数组
- php - 在php中为每个用户制作一个独特的电路
- python - 将消息变量从 discord.py 中的 async def 中传递出去
- mysql - 如何用mysql显示每个用户的最高分
- python - Discord.py - 根据频道检查用户是否具有角色
- r - 是否有 R 函数可以从大型数据集中查找重复的 ID?
- html - divbox 底部的空格