在CloudFormation模板中暂停资源创建

时间:2016-09-09 04:21:51

标签: amazon-web-services amazon-cloudformation

我有一个允许用户定义S3 Bucket的模板。在同一模板中,我可以选择添加Lambda触发器,SQS触发器和SNS触发器。

为了使用可选触发器成功创建S3 Bucket,我需要为所选触发器创建策略。

我面临的问题是,有时它会起作用,有时它不会因竞争条件而产生。如果在策略之前创建了Bucket,则堆栈创建将失败。

我尝试在S3 Bucket资源上添加条件DependsOn属性,但DependsOn只接受字符串。

这就是我的DependsOn属性的样子:

"S3Bucket": {
    "Type": "AWS::S3::Bucket",
    "DependsOn": [{
        "Fn::If": ["DoCreateQueueTrigger",
        "SQSMessagePermission",
        ""]
    }],

}

我唯一能想到的就是在模板执行到达Bucket创建之前暂停模板。

有办法吗?

1 个答案:

答案 0 :(得分:0)

您可以通过声明两个具有相同名称的互惠条件资源来完成此任务:一个声明可选触发器,另一个是“空资源”,当真实资源未实际创建时,它只接受DependsOn声明:

Conditions:
  DoCreateTrigger: !Equals [!Ref CreateTrigger, true]
  NotCreateTrigger: !Not [!Equals [!Ref CreateTrigger, true]]
Resources:
  SQSMessagePermission:
    Condition: NotCreateTrigger
    Type: AWS::CloudFormation::WaitConditionHandle
  SQSMessagePermission:
    Condition: DoCreateTrigger
    Type: AWS::SQS::QueuePolicy
    Properties:
      # ...etc...
  S3Bucket:
    Type: AWS::S3::Bucket
    DependsOn: [SQSMessagePermission]
    Properties:
      # ...etc...