【问题标题】:How to add an AWS-Lambda-based trigger on S3-Bucket with CLI如何使用 CLI 在 S3-Bucket 上添加基于 AWS-Lambda 的触发器
【发布时间】:2018-01-16 05:39:34
【问题描述】:

我很好奇我们是否可以通过编程方式在 AWS S3 存储桶上创建触发器?

Given 是一个 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 存储桶,它会在创建的每个新对象上自动调用 Lambda 函数。

现在我在 Web 浏览器的 AWS 控制台中执行此操作,如屏幕截图所示。但我希望能够使用 CLI 命令设置整个场景。我该怎么做?

我发现它需要这样的东西:

aws s3api put-bucket-notification-configuration --region us-east-1 \
--bucket **** \
--notification-configuration file://encodeVideoConfiguration.json

但我不知道 encodeVideoConfiguration.json 的内容应该是什么?

【问题讨论】:

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


    【解决方案1】:

    --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 字段。

    【讨论】:

      【解决方案2】:

      这是您要创建的 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

      【讨论】:

        【解决方案3】:

        你曾经能够让它工作吗?我正在寻找非常相似的东西,但到目前为止还不能让它工作。

        我想在 s3 对象添加/删除上触发 Lambda,并希望通过 cli 将源存储桶作为参数传递。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-01-29
          • 2017-12-02
          • 1970-01-01
          • 2021-03-16
          • 1970-01-01
          • 2019-01-02
          • 2021-06-13
          相关资源
          最近更新 更多