AWS CloudFormation 条件模板验证

5
我有一个模板可以创建一个包括多个地区的云构建方案,其中包括DynamoDB和DAX,例如us-east-1和ap-southeast-1。
然而,在us-east-1工作时,这个模板在ap-southeast-1地区是行不通的,因为DAX还没有在该地区推出。
我原本以为可以使用“条件”来实现这一点,这样对于一个地区(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]

是否有可能以某种方式配置此模板,或者应该创建一个单独的模板?


对于遇到相同问题的人们:不幸的是,我没有找到其他解决方法,只能为该地区创建一个单独的模板。 - Enigo
2个回答

1

模板验证是针对区域中可用资源进行的。由于当前在ap-southeast-1地区无法使用DAX,因此资源将在该地区验证失败。我有几个建议可以解决这个问题:

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

1
DAX现在可在ap-southeast-1使用,因此如果这是唯一导致您问题的区域,那么它不再是问题了。 - Kevin Christen
是的,但对于其他一些服务来说,实际上仍然会存在问题。 - Enigo

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接