我很好奇我们是否可以通过编程方式在AWS S3 Bucket上创建触发器?
给出了S3-Bucket和AWS Lambda函数。 AWS Lambda函数是根据CLI创建的,可以使用基于CLI的命令随时更新/重新创建。
aws lambda create-function \
--region us-east-1 \
--function-name encodeVideo \
--zip-file fileb:///tmp/encode_video.zip \
--role $LAMBDA_ROLE_ARN \
--handler encode_video.handler \
--runtime nodejs6.10 \
--timeout 10 \
--memory-size 1024
aws lambda add-permission \
--function-name encodeVideo \
--region us-east-1 \
--statement-id some-unique-id \
--action "lambda:InvokeFunction" \
--principal s3.amazonaws.com \
--source-arn arn:aws:s3:::**** \
--source-account ***********
现在我想配置一个S3-bucket,它将在每个创建的新对象上自动调用Lambda函数。
现在我在Web浏览器的AWS控制台中执行此操作,如屏幕截图所示。但我希望能够使用CLI命令设置整个场景。我怎么能这样做?
我发现它需要类似的东西:
aws s3api put-bucket-notification-configuration --region us-east-1 \
--bucket **** \
--notification-configuration file://encodeVideoConfiguration.json
但我无法弄清楚 encodeVideoConfiguration.json 的内容应该是什么?
答案 0 :(得分:2)
同一个电话的AWS CLI docs详细介绍了--notification-configuration
的文档结构:
{
"TopicConfigurations": [
{
"Id": "string",
"TopicArn": "string",
"Events": ["s3:ReducedRedundancyLostObject"|"s3:ObjectCreated:*"|"s3:ObjectCreated:Put"|"s3:ObjectCreated:Post"|"s3:ObjectCreated:Copy"|"s3:ObjectCreated:CompleteMultipartUpload"|"s3:ObjectRemoved:*"|"s3:ObjectRemoved:Delete"|"s3:ObjectRemoved:DeleteMarkerCreated", ...],
"Filter": {
"Key": {
"FilterRules": [
{
"Name": "prefix"|"suffix",
"Value": "string"
}
...
]
}
}
}
...
],
"QueueConfigurations": [
{
"Id": "string",
"QueueArn": "string",
"Events": ["s3:ReducedRedundancyLostObject"|"s3:ObjectCreated:*"|"s3:ObjectCreated:Put"|"s3:ObjectCreated:Post"|"s3:ObjectCreated:Copy"|"s3:ObjectCreated:CompleteMultipartUpload"|"s3:ObjectRemoved:*"|"s3:ObjectRemoved:Delete"|"s3:ObjectRemoved:DeleteMarkerCreated", ...],
"Filter": {
"Key": {
"FilterRules": [
{
"Name": "prefix"|"suffix",
"Value": "string"
}
...
]
}
}
}
...
],
"LambdaFunctionConfigurations": [
{
"Id": "string",
"LambdaFunctionArn": "string",
"Events": ["s3:ReducedRedundancyLostObject"|"s3:ObjectCreated:*"|"s3:ObjectCreated:Put"|"s3:ObjectCreated:Post"|"s3:ObjectCreated:Copy"|"s3:ObjectCreated:CompleteMultipartUpload"|"s3:ObjectRemoved:*"|"s3:ObjectRemoved:Delete"|"s3:ObjectRemoved:DeleteMarkerCreated", ...],
"Filter": {
"Key": {
"FilterRules": [
{
"Name": "prefix"|"suffix",
"Value": "string"
}
...
]
}
}
}
...
]
}
对于您的情况,您只需提供JSON结构的LambdaFunctionConfigurations
字段。
答案 1 :(得分:0)
这是您要创建的JSON配置。
{
"LambdaFunctionConfigurations": [
{
"Id": "s3eventtriggerslambda",
"LambdaFunctionArn": "theactualarn",
"Events": ["s3:ObjectCreated:*"],
"Filter": {
"Key": {
"FilterRules": [
{
"Name": "suffix",
"Value": "thesuffix"
},
{
"Name": "prefix",
"Value": "theprefix"
}
]
}
}
}
]
}
将上面的json复制到名为“s3triggerlambdaconfig.json”的文件中 来自aws cli:
aws s3api put-bucket-notification-configuration \
--bucket bucketname \
--notification-configuration file://s3triggerlambdaconfig.json
示例lambda arn将是这样的 - arn:aws:lambda:us-east-1:550060223145:function:lambda-function-test
答案 2 :(得分:0)
您曾经能够使它正常工作吗?我正在寻找非常相似的东西,但到目前为止还无法使其正常工作。
我想在s3对象添加/删除操作上触发Lambda,并希望通过cli并通过源存储区作为参数来实现。