AWS CloudFormation 条件模板验证

Eni*_*igo 5 amazon-web-services aws-cloudformation amazon-dynamodb-dax

我有一个模板,可以使用 DynamoDB 和 DAX 为多个区域(例如 us-east-1 和 ap-southeast-1)创建 CloudFormation。虽然适用于 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:
    .....
Run Code Online (Sandbox Code Playgroud)

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

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

是否可以配置这样的模板,或者应该创建一个单独的模板?

小智 1

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

\n\n
    \n
  • 预处理您的模板以去除当前不受支持的区域中的 DAX 资源
  • \n
  • 将您的模板拆分为三个单独的模板,我将其称为DAXNoDAXOther :\n\n
      \n
    • 在支持 DAX 的区域中,使用包含集群的DAX模板创建堆栈,并将 cluster\xe2\x80\x99s 名称导出为ClusterName的值。
    • \n
    • 在不\xe2\x80\x99t 支持 DAX 的区域中,使用NoDAX模板创建堆栈,并导出none作为ClusterName的值。由于每个模板都需要一个资源,因此请包含一个AWS::CloudFormation::WaitConditionHandle 作为此 template\xe2\x80\x99s 的唯一资源。
    • \n
    • 在所有区域中,使用导入DaxClusterName的Other模板创建堆栈,并基于. 然后使用条件来确定此模板中的资源是否可以依赖于集群。Fn:Equals: [\xe2\x80\x9cDaxClusterName\xe2\x80\x9d, \xe2\x80\x9cnone\xe2\x80\x9d]
    • \n
  • \n
\n