AWS CloudFormation条件模板验证

时间:2018-01-12 14:56:59

标签: amazon-web-services amazon-cloudformation amazon-dynamodb-dax

我有一个模板可以为多个区域创建一个包含DynamoDB和DAX的CloudFormation,例如us-east-1和ap-southeast-1。 在为east-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 ::集群]

是否有可能无论如何配置这样的模板或者应该创建一个单独的模板?

1 个答案:

答案 0 :(得分:1)

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

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