如何使用CLI在S3-Bucket上添加基于AWS-Lambda的触发器

如何使用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的内容是什么?

enter image description here

--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领域。