如何使用CLI在S3-Bucket上添加基于AWS-Lambda的触发器
问题描述:
我很好奇我们是否可以通过编程方式在AWS S3 Bucket上创建触发器?如何使用CLI在S3-Bucket上添加基于AWS-Lambda的触发器
鉴于是S3存储桶和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存储桶,它将在创建的每个新对象上自动调用Lambda函数。
现在我已经在网页浏览器的AWS控制台中执行了此操作,如屏幕截图所示。但我希望能够使用CLI命令设置整个场景。我怎样才能做到这一点?
我已经想通了,它需要类似:
aws s3api put-bucket-notification-configuration --region us-east-1 \
--bucket **** \
--notification-configuration file://encodeVideoConfiguration.json
,但我无法弄清楚encodeVideoConfiguration.json的内容是什么?
答
的--notification-configuration
文档结构进行了详细的在AWS CLI docs同一呼叫描述:
{
"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
领域。