2016-12-12 11 views
0

私はクラウドフォーメーションテンプレートを作成しています。私のスタックにリソースを作成するのは、環境によって異なります。
したがって、パラメータ(Environment)の値をチェックし、それに基づいてそのリソース(条件:ISProduction)を作成します。
しかし、私の問題は、リソース(MyProductionResource)が作成された場合、別のリソース(AnotherResource)がそれに依存し、他の(MyProductionResource)の出力属性を使用する必要があるということです。ここで
コード:AWSクラウドフォーメーション条件DependsOn

Conditions: 
    ISProduction: 
    "Fn::Equals": 
     - !Ref Environment 
     - production 
... 

MyProductionResource: 
    Type: AWS::CloudFormation::Stack 
    Condition: ISProduction 
    Properties: 
    [.. properties..] 

AnotherResource: 
    Type: AWS::CloudFormation::Stack 
    DependsOn: 
     - AResource 
     - MyProductionResource 
    Properties: 
     TemplateURL: whatever 
     Parameters: 
     AParameter: !GetAtt MyProductionResource.Outputs.SomeString 

私の問題は、私はISProductionがtrueの場合にのみ、AnotherResourceがMyProductionResourceに依存するようにしたいということです。考え方は、DependsOnアイテムに何らかの種類の条件を追加すること、または同じ結果をもたらすものを追加することです。
AWSクラウドフォーメーションでどうすればいいですか?
また、dependsOnリストにリストされているリソースが作成されていないとどうなるかわかりません。クラウド形成テンプレートがエラーを生成するでしょうか?この属性を安全に読み取らせるにはどうすればいいですか?GetAtt MyProductionResource.Outputs.SomeString?場合は、残念ながらDEPENDSONは:: Fnキーを許可していません

AParameter: !If [ISProduction, !GetAtt MyProductionResource.Outputs.SomeString, "default value?!?"] 

パラメータのためではなく、場合

答えて

1

あなたが!使用することができます。

リソースを2回作成することができます。

AnotherProductionResource: 
    Type: AWS::CloudFormation::Stack 
    Condition: ISProduction 
    DependsOn: 
    - AResource 
    - MyProductionResource 
    Properties: 
    [...] 
AnotherNonProductionResource: 
    Type: AWS::CloudFormation::Stack 
    Condition: ISNotProduction 
    DependsOn: 
    - AResource 
    Properties: 
    [...] 

しかし、非常に多くのifを使用することは、環境ができるだけ似ているべきであるという考え方に反するものです。だから、あなたはこのすべてを取り除くことができますか?