5

我有一个模板可以使用 DynamoDB 和 DAX 为多个区域创建 CloudFormation,例如 us-east-1 和 ap-southeast-1。在为 us-east-1 工作时,此模板不适用于 ap-southeast-1,因为该区域尚不支持 DAX。

我希望这可以使用 来完成Conditions,因此对于一个区域 (us-east-1) 我将同时拥有 DynamoDB 和 DAX,而对于另一个区域 (ap-southeast-1) - 只有 DynamoDB:

Conditions: 
  isDAXAvailable: !Not [!Equals [ !Ref "AWS::Region", ap-southeast-1 ]]

Resources:
  DynamoDBTable:
    Type: AWS::DynamoDB::Table
    Properties:
    .....

  DaxCluster:
    Type: AWS::DAX::Cluster
    Condition: isDAXAvailable
    Properties:
    .....

但不幸的是,我收到一个错误:

调用 ValidateTemplate 操作时发生错误 (ValidationError):模板格式错误:无法识别的资源类型:[AWS::DAX::Cluster]

无论如何都可以配置这样的模板还是应该创建一个单独的模板?

4

2 回答 2

1

模板验证是针对区域中可用的资源完成的。由于 DAX 当前在 ap-southeast-1 中不可用,因此AWS::DAX::Cluster资源将无法在此处验证。我有一些关于如何完成这项工作的建议:

  • 预处理您的模板以去除当前不支持的区域中的 DAX 资源
  • 将您的模板拆分为三个单独的模板,我将其称为DAXNoDAXOther
    • 在支持 DAX 的区域中,使用包含您的集群的DAX模板创建一个堆栈,并将集群的名称导出为ClusterName的值。
    • 在不支持 DAX 的区域中,使用NoDAX模板创建堆栈,并将none作为ClusterName的值导出。由于每个模板都需要一个资源,因此包含一个AWS::CloudFormation::WaitConditionHandle 作为此模板的唯一资源。
    • 在所有区域中,使用导入DaxClusterName的Other模板创建堆栈,并基于. 然后使用条件判断这个模板中的资源是否可以依赖集群。Fn:Equals: [“DaxClusterName”, “none”]
于 2018-01-26T22:57:58.063 回答
0

目前,有一种解决方法可以Transform: AWS::Serverless-2016-10-31向您的模板添加类似的转换

虽然这可能需要添加一项CAPABILITY_AUTO_EXPAND功能,但“使用此转换时不会产生任何费用”,如果您没有任何资源,它不应该影响您的模板,如果您有资源AWS::Serverless,您应该已经在使用此转换AWS::Serverless

于 2021-10-16T00:30:31.143 回答