DependsOn AWS Cloud Formation 中的最佳实践(包括示例)

DependsOn best practices in AWS Cloud Formation (example included)

在 CloudFormation 中使用 Depends On 的最佳实践是什么?我相信从我读到的内容来看,不建议在 Azure 中这样做并尽量减少它的使用。

我想在 ASG 策略和 ASG 组之间建立 DependsOn 关系。

上图中可以看到ASG Policy有一个字段AutoScalingGroupName.

因此,ASG 策略取决于 AutoScaling 组的创建。

这两者之间是否存在依赖关系?

一般来说,CloudFormation 模板中引用另一个资源的任何资源都会自动具有 隐含 DependsOn.

例如:

  PrivateRouteTable1:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Sub ${EnvironmentName} Private Routes (AZ1)

  DefaultPrivateRoute1:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref PrivateRouteTable1
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId: !Ref NatGateway1

DefaultPrivateRoute1 将有一个隐含的 DependsOnPrivateRouteTable1 NatGateway1.

因此,只有在没有直接关系但需要创建顺序的情况下,您才特别需要添加 DependsOn。这是一个例子:

  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: !Ref EnvironmentName

  NatGateway1EIP:
    Type: AWS::EC2::EIP
    DependsOn: InternetGatewayAttachment
    Properties:
      Domain: vpc

在这种情况下,在弹性 IP 地址和 InternetGateway 之间定义了 DependsOn。这很有用,因为弹性 IP 地址和互联网网关(链接到 VPC)之间没有直接关系。

我曾见过 Amazon EC2 实例在其用户数据脚本中出现故障的情况,因为其他资源不存在 'ready',因此该脚本无法访问 Internet。诊断此类情况可能很困难,因为它们可能是暂时的。因此,您可能希望在所需资源之间没有直接引用的地方专门添加一些 DependsOn 引用。