3

我一直在使用无服务器框架(1.61.0)。我有很多很多计划的事件正在同步来自另一个来源的数据。例如,我Category在一个 lambda 函数中同步实体。

categories:
  handler: functions/scheduled/categories/index.default
  name: ${self:provider.stage}-categories-sync
  description: Sync categories
  events:
    - schedule:
        name: ${self:provider.stage}-moe-categories
        rate: rate(1 hour)
        enabled: true
        input:
          params:
            appId: moe
            mallCode: moe
          scheduled: true

所以对于这个工人,我还有另外 15 个预定的事件。它们作为新资源保留在 CloudWatch 上,这使得它变得非常大。即使我们通过向 AWS 提交增加限制请求来增加它,我们也超过了 CloudWatch 事件限制。

有没有办法为同一个 CloudWatch Event 定义多个目标?因此,与其在 CloudWatch 上定义 lambda_func_count (15) x event_count (15) x stage_count (dev, staging, prod) 资源,我们可以为每个单独的 lambda 函数定义一个具有多个目标的事件。

目前,它在 AWS 控制台上受支持,但无法通过无服务器框架找到实现此目的的方法。 在此处输入图像描述

4

2 回答 2

0

帮助缓解此问题的一种方法是不要在所有阶段使用相同的 AWS 账户。查看 AWS Organizations 功能,该功能可帮助您为主账户创建子账户,如果您使用无服务器框架专业版,即使在免费套餐上,您也可以轻松地将特定阶段部署到特定 AWS 账户。每个子账户都有自己的一组资源,不会影响其他账户。如果您有多种方法可以跨多个帐户破坏事物,您甚至可以更进一步;也许你可以按类别分解它?

于 2020-01-21T12:56:48.030 回答
0

以下是具有多个目标的单个 CloudWatch 规则示例(每个目标都是 AWS Lamdba 函数或 Lambda 别名)

"LCSCombinedKeepWarmRule2":{
    "Type":"AWS::Events::Rule",
    "Properties": {
      "Description":"LCS Keep Functions Warm Rule",
      "ScheduleExpression": "rate(3 minutes)",
      "State":"ENABLED",
      "Targets":[
      {
        "Arn":{"Fn::GetAtt":["CheckCustomer","Arn"]},
        "Id":"CheckCustomerId"
      },
      {
        "Arn":{"Fn::GetAtt":["PatchCustomerId","Arn"]},
        "Id":"PatchCustomerId"
      },
      {
        "Arn":{"Ref":"GetTierAttributes.Alias"},
        "Id":"GetTierAttributes"
      },
      {
        "Arn":{"Ref":"ValidateToken.Alias"},
        "Id":"ValidateTokenId"
      },
      {
        "Arn":{"Ref":"EventStoreRecVoucher.Alias"},
        "Id":"EventStoreRecVoucherId"
      }
      ]
    }
},
于 2020-09-03T03:36:18.453 回答