在 CloudFormation 模板中,可以使用一个 DependsOn
属性来指定显式的资源依赖关系。但是有时候,特别是当资源依赖关系是隐式的时候, DependsOn
可能不会解决问题。在这种情况下,可以考虑在 CloudFormation 模板中使用以下技巧来确保资源的正确部署顺序。
首先,将依赖资源定义为在同一个 YAML 文件内。然后,在创建实际资源之前,添加一个“占位符”资源。这个占位符将创建一个空的资源,并将其删除,以此来确保该资源之前的所有资源都已被创建。最后,将此占位符资源的名称用于需要隐式依赖的资源的 DependsOn
属性中。
下面是一个示例 YAML 文件,其中包含一个 Redis 主节点和两个支持节点。支持节点必须在主节点之后创建,并且必须在对 Redis 主节点进行任何更改之前存在。
Resources:
RedisPrimary:
Type: AWS::ElastiCache::ReplicationGroup
Properties:
...
RedisSupport1:
Type: AWS::ElastiCache::ReplicationGroup
Properties:
...
RedisSupport2:
Type: AWS::ElastiCache::ReplicationGroup
Properties:
...
RedisPrimaryPlaceholder:
Type: AWS::CloudFormation::WaitConditionHandle
RedisSupport1Placeholder:
Type: AWS::CloudFormation::WaitConditionHandle
DependsOn: RedisPrimaryPlaceholder
RedisSupport2Placeholder:
Type: AWS::CloudFormation::WaitConditionHandle
DependsOn: RedisSupport1Placeholder
RedisSupport1Dependency:
Type: AWS::CloudFormation::WaitCondition
Properties:
Handle: !Ref RedisSupport1Placeholder
RedisSupport2Dependency:
Type: AWS::CloudFormation::WaitCondition
Properties: