首页 文章

在CloudFormation模板中暂停资源创建

提问于
浏览
0

我有一个模板,允许用户定义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

    您可以通过声明两个具有相同名称的互惠条件资源来完成此任务:一个声明可选触发器,另一个'null resource'在实际未创建实际资源时接受 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...
    

相关问题