Amazon web services AWS CloudFormation条件模板验证
我有一个模板,可以使用DynamoDB和DAX为多个地区创建云结构,例如us-east-1和ap-Southwest-1。 在为us-east-1工作时,此模板不适用于ap-Southast-1,因为该地区尚未提供DAX 我希望这可以通过使用Amazon web services AWS CloudFormation条件模板验证,amazon-web-services,amazon-cloudformation,amazon-dynamodb-dax,Amazon Web Services,Amazon Cloudformation,Amazon Dynamodb Dax,我有一个模板,可以使用DynamoDB和DAX为多个地区创建云结构,例如us-east-1和ap-Southwest-1。 在为us-east-1工作时,此模板不适用于ap-Southast-1,因为该地区尚未提供DAX 我希望这可以通过使用条件来实现,因此对于一个地区(美国东部-1),我将拥有DynamoDB和DAX,而对于另一个地区(ap-Southwest-1),只有DynamoDB: Conditions: isDAXAvailable: !Not [!Equals [ !Ref
条件来实现,因此对于一个地区(美国东部-1),我将拥有DynamoDB和DAX,而对于另一个地区(ap-Southwest-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::群集]
是否可以配置这样的模板,或者创建一个单独的模板 模板验证是针对区域内可用的资源进行的。由于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”]
创建条件。然后使用条件来确定此模板中的资源是否依赖于集群
对于存在相同问题的任何人:不幸的是,我找不到任何其他解决方案,只能为其他地区创建一个单独的模板。DAX现在在ap-Southwest-1中可用,因此,如果这是唯一一个给您带来问题的地区,它应该不会再出现了。