我完全不喜欢使用 AWS。我正在尝试让一个非常简单和基本的操作起作用。我想要做的是,在将文件上传到一个 s3 存储桶后,我希望该上传触发一个 Lambda 函数,将该文件复制到另一个存储桶。
我转到 AWS 管理控制台,在 us-west2 服务器上创建了一个名为“test-bucket-3x1”的 s3 存储桶用作我的“源”存储桶,另一个名为“test-bucket-3x2”的存储桶用作我的“目标”存储桶.创建这些存储桶时,我没有更改或修改任何设置。
在 Lambda 控制台中,我为“test-bucket-3x1”创建了一个 s3 触发器,将“事件类型”更改为“ObjectCreatedByPut”,并且没有更改任何其他设置。
这是我实际的 lamda_function 代码:
import boto3
import json
s3 = boto3.resource('s3')
def lambda_handler(event, context):
bucket = s3.Bucket('test-bucket-3x1')
dest_bucket = s3.Bucket('test-bucket-3x2')
print(bucket)
print(dest_bucket)
for obj in bucket.objects():
dest_key = obj.key
print(dest_key)
s3.Object(dest_bucket.name, dest_key).copy_from(CopySource = {'Bucket': obj.bucket_name, 'Key': obj.key})
当我使用 AWS Lambda 控制台提供的基本“HelloWorld”测试测试此功能时,我收到此“
{
"errorMessage": "'s3.Bucket.objectsCollectionManager' object is not callable",
"errorType": "TypeError",
"stackTrace": [
[
"/var/task/lambda_function.py",
12,
"lambda_handler",
"for obj in bucket.objects():"
]
]
}
我需要对我的代码进行哪些更改才能在将文件上传到 test-bucket-3x1 时触发 lambda 函数并将文件复制到 test-bucket-3x2?
谢谢你的时间。
原文由 Tkelly 发布,翻译遵循 CC BY-SA 4.0 许可协议
我将从蓝图开始
s3-get-object
有关从蓝图创建 lambda 的更多信息,请使用 此页面:这是上面蓝图的代码:
然后你需要更新上面的代码,不仅要获取对象信息,还要复制和删除源,为此你可以参考这个答案:
资料来源: 如何使用 node.js 将对象从 s3 复制到 s3