0

我正在尝试使用 serverless.yml 配置在多个表上使用 dynamodb 流来触发 lambda 函数。是否可以在 aws serverless.yml 的触发器上配置通用 arn。

有 dynamodb 表 req_tnt1、req_tnt2、req_tnt2 ...等等。每当 req_tnt* 表更新时,我都会触发 lambda 并将信息存储在 elasticsearch 中以进行自由文本搜索。我能够为触发 lambda 和更新弹性搜索的单个表执行任务,但我在为所有表启用 lambda 触发器(req_tnt *)时遇到问题。

4

1 回答 1

0

不幸的是,这里不可能使用通配符。

在无服务器中将流定义为 Lambda 输入会导致 CloudFormation 如下所示:

"MyLambdaEventSourceMappingDynamodbOrdersTable": {
      "Type": "AWS::Lambda::EventSourceMapping",
      "DependsOn": "MyLambdaIamRoleLambdaExecution",
      "Properties": {
        "BatchSize": 10,
        "EventSourceArn": {
          "Fn::GetAtt": [
            "OrdersTable",
            "StreamArn"
          ]
        },
        "FunctionName": {
          "Fn::GetAtt": [
            "MyLambdaLambdaFunction",
            "Arn"
          ]
        },
        "StartingPosition": "TRIM_HORIZON",
        "Enabled": "True",
        "MaximumBatchingWindowInSeconds": 60
      }
    },

类型的资源根据文档AWS::Lambda::EventSourceMapping使用该属性EventSourceArn来指定单个源。

您可以通过编写另一个 Lambda 函数以编程方式添加新的事件源映射,该函数在创建新表时将 CloudWatch 事件作为其输入,然后将该表的 EventSourceMapping 添加到您的 Lambda 函数。

这可能会有扩展限制,因为每个 Lambda 的事件源映射数量很可能是有限的(尽管我找不到这个数字)。

于 2020-03-27T16:36:31.043 回答