2016-12-12 8 views
0

Ich schreibe eine Wolkenbildungsvorlage und die Erstellung einer Ressource in meinem Stapel hängt von der Umgebung ab.
Daher überprüfe ich den Wert eines Parameters (Umgebung), und basierend darauf erstelle ich diese Ressource (Bedingung: ISProduction).
Mein Problem ist jedoch, dass im Falle, dass die Ressource erstellt wird (MyProductionResource), eine andere Ressource (AnotherResource) davon abhängig wird und ein Ausgabeattribut von der anderen (MyProductionResource) verwenden muss.
Hier ist der Code:AWS Wolkenbildungsbedingungen auf 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 

Mein Problem ist, dass ich AnotherResource nur auf MyProductionResource abhängig sein wollen, wenn ISProduction wahr ist. Eine Idee besteht darin, im DependsOn-Objekt eine Art von Bedingungen hinzuzufügen oder irgendetwas, das zum selben Ergebnis führen würde.
Wie kann ich das bei AWS Cloud Formation machen?
Auch ich bin mir nicht sicher, was passiert, wenn die Ressource, die in der Liste dependsOn aufgeführt ist, nicht erstellt wird. Würde die Wolkenbildungsvorlage einen Fehler erzeugen? Wie kann ich dieses Attribut lesensicher machen? GetAtt MyProductionResource.Outputs.SomeString?

Antwort

1

können Sie verwenden! Wenn für den Parameter

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

aber leider DependsOn Fn nicht erlaubt :: Wenn.

So könnten Sie erstellen, um zweimal Ressource.

Aber so viele ifs ist irgendwie gegen die Idee, dass Ihre Umgebungen so ähnlich wie möglich sein sollten. Vielleicht kannst du diese ganze Sache loswerden?