如何在 serverless.yml 默认值运算符中使用 `!GetAtt`?

How can I use `!GetAtt` in serverless.yml default value operator?

我有 serverless.yml 用于部署 dynamodb 和 lambda 函数。 lambda 函数需要引用 dynamodb table stream arn.

functions:
  onStreamHandler:
    handler: ...
    name: ...
    events:
      - stream:
        type: dynamodb
        arn: ${opt:dbStreamArn, !GetAtt EntityTable.StreamArn}

arn: 字段中,我想指定如果未从命令行参数指定 dbStreamArn,则从 EntityTable.StreamArn 获取值。但是我得到了这个错误:


  Serverless Error ---------------------------------------
 
  Missing "arn" property for stream event in function "onStreamHandler" The correct syntax is: stream: <StreamArn> OR an object with an "arn" property. Please check the docs for more info.

引用 arn 值的正确方法是什么?

可能是因为云形成试图在您的 dynamodb 之前创建您的 lambda table。

要解决此问题,请将 dependsOn 添加到您的 lambda 函数中,例如:

functions:
  onStreamHandler:
    handler: ...
    name: ...
    events:
      - stream:
        type: dynamodb
        arn: ${opt:dbStreamArn, !GetAtt EntityTable.StreamArn}
    dependsOn:
      - EntityTable

这将在部署 EntityTable 后部署函数。 !GetAtt EntityTable.StreamArn 然后应该正确解析。