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

时间:2017-08-08 15:04:42

标签: amazon-web-services amazon-s3 aws-lambda aws-sdk aws-cli

我很好奇我们是否可以通过编程方式在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 的内容应该是什么?

enter image description here

3 个答案:

答案 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并通过源存储区作为参数来实现。