CloudFormation WaitConditionHandle是否会延迟WaitCondition的成功?

时间:2019-07-15 21:04:48

标签: amazon-web-services amazon-cloudformation

我有一个CFn脚本,旨在建立通向S3存储桶的多区域路径。

模板可以创建目标存储桶和必要策略,也可以采用现有存储桶名称的参数。在第一种情况下,我们可以使用DependsOn: MyBucketPolicy,以便在拥有权限之前不会开始跟踪。在第二种情况下,路径不应该依赖任何内容。不幸的是,在某些情况下不允许使用功能。

Philip Garbe提供了this workaround(#7),我将其应用于自己的模板。但是,目前尚不清楚它为什么起作用。

Conditions:
  BucketExists: !Not [!Equals [!Ref pExistingBucket, ""]]
  NeedNewBucket: !Equals [!Ref pExistingBucket, ""]

Resources:
  GovernanceBucketPolicy:
    Type: AWS::S3::BucketPolicy
    Condition: NeedNewBucket

  BucketPolicyWaitHandle:
    Type: "AWS::CloudFormation::WaitConditionHandle"
    Condition: NeedNewBucket
    DependsOn: MyBucketPolicy

  WaitHandle:
    Type: "AWS::CloudFormation::WaitConditionHandle"

  WaitCondition:
    Type: "AWS::CloudFormation::WaitCondition"
    Properties:
      Handle: !If
        - NeedNewBucket
        - !Ref BucketPolicyWaitHandle
        - !Ref WaitHandle
      Timeout: "1"
      Count: 0

  MyTrail:
    Type: AWS::CloudTrail::Trail
    DependsOn: WaitCondition
    S3BucketName: !If [BucketExists, !Sub ${pExistingBucket}, !Ref MyBucket]

我认为由于计数为0,所以立即触发了等待条件。The docs对此进行解释

  

如果等待条件在超时时间到期之前收到了必要数量的成功信号(如Count属性中所定义),则AWS CloudFormation会将等待条件标记为CREATE_COMPLETE并继续创建堆栈。

但是,尽管我认为这是唯一可行的原因,但是似乎没有提及等待句柄的创建。我在文档中缺少什么吗?在标记为完成之前,等待是否还需要其句柄存在?在一起有更好的方法吗?

0 个答案:

没有答案