2016-09-09 8 views
0

私はS3バケットを定義できるテンプレートを用意しています。同じテンプレートでは、Lambda Trigger、SQS Trigger、SNS Triggerを追加するオプションがあります。CloudFormationテンプレートのリソース作成を一時停止

オプションのトリガーを使用してS3バケットを正常に作成するには、選択したトリガーのポリシーを作成する必要があります。

私が直面している問題は、時には動作し、時には競合状態に起因しないことです。バケットがポリシーの前に作成されている場合、スタックの作成は失敗します。

S3 Bucketリソースに条件付きDependsOnプロパティを追加しようとしましたが、DependsOnは文字列のみを受け取ります。私は考えることができる唯一のことは、それがバケツの作成に到達する前に、テンプレートの実行を一時停止している

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

} 

これは私のDEPENDSON属性はように見えた方法です。

これを行う方法はありますか?

+0

私はそれをチェックする時間がありませんので、これがうまくいくかどうかは100%ではありませんが、 '' Ref ': '' '' 'の代わりに' 'Ref": "AWS :: NoValue" '' Fn :: If ''のelse条件は? –

+0

私もそれを試みました。それは動作しません。 – Asdfg

+1

もう1つ考えてみましょう。ポリシーをネストされたスタックに置き、バケットをネストされたスタックに依存させます。ネストされたスタックは、すべてのリソースが完了したときにのみ完了したとみなされます。作成されたポリシーは、他のリソースで参照する必要がある場合は、ネストされたスタック出力として渡すことができます。 –

答えて

0

次の2つが同じ名前宣言することでこれを実現することができ、相互の条件付き資源:オプションのトリガーを宣言1、単に現実のリソースが実際に作成されていない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... 
関連する問題