【发布时间】:2017-01-28 13:09:03
【问题描述】:
我有一个使用 Boto3 用 Python 编写的 Lambda 函数,并设置为在将文件放入 S3 存储桶时触发。我想将该文件跨账户复制到另一个 S3 存储桶。代码如下:
source = boto3.resource('s3')
destination = boto3.resource('s3',
aws_access_key_id='<redacted>',
aws_secret_access_key='<redacted>')
source_bucket = source.Bucket(bucket)
destination_bucket = destination.Bucket('targetBucket')
copy_source = {
'Bucket': bucket,
'Key': key
}
destination_bucket.copy(copy_source, key)
当 Lambda 函数触发时,一切似乎都很顺利,但副本从未发生。当该行触发时,我在日志中收到以下消息。与 S3 存储桶的连接似乎超时。我已经验证这似乎不是权限问题。
[INFO] 2017-01-25T19:33:59.400Z c942ee38-e334-11e6-850d-45d8f93ed656 开始 新的 HTTPS 连接(1):[source-bucket].s3.amazonaws.com
有人有什么想法吗?
【问题讨论】:
-
您是否将函数放在 VPC 中?
-
文件有多大?在时间范围内复制可能太大了。
-
文件很小。我正在使用大约 1 Mb 的 jpeg 文件进行测试。实际使用将是小的 xml 文件。
-
该函数在VPC中,但在尝试调试时,我暂时将bucket开放给世界。我能够从 AWS 之外的浏览器访问 S3 中的文件。但这不是我直接想到的。我会尝试解决这个问题。
-
在 VPC 中,Lambda 函数必须与私有子网关联,配备 NAT 设备,或者您需要 S3 VPC Endpoint。
标签: python amazon-web-services amazon-s3 aws-lambda boto3