Bedingte Eigenschaft in AWS CloudFormation

10

Wir haben eine AWS CloudFormation-Vorlage zum Erstellen einiger EC2-Instanzen. Einige davon erfordern jedoch eine bestimmte PrivateIpAddressund ich habe Mühe herauszufinden, wie ich das in die Vorlage integrieren kann.

Im Moment habe ich einen Vorlagenparameter PrivateIPund eine Bedingung zum Erstellen RequestedPrivateIP. So weit, ist es gut. Ich kann jedoch nicht herausfinden, wie ich es in die AWS::EC2::InstanceRessourcenspezifikation integrieren kann. Ich habe es versucht:

    "PrivateIpAddress": {
        "Fn::If": [ "RequestedPrivateIP",
            { "Ref": "PrivateIP" },
            ""                            <-- This doesn't work
        ]
    },

Aber das schlägt fehl, wenn RequestedPrivateIPes falsch ist

CREATE_FAILED    AWS::EC2::Instance    NodeInstance    Invalid addresses: []

Haben Sie eine Idee, wie Sie optional eine statische private IP zuweisen und diese, falls nicht angegeben, AWS überlassen, um eine dynamische festzulegen?

MLu
quelle

Antworten:

0

Da die PrivateIpAddressEigenschaft anscheinend keine leere Zeichenfolge als Wert unterstützt, würde ich vorschlagen, zwei separate Ressourcen von Ihnen zu erstellen AWS::EC2::Instance. Einer von ihnen wird Ihren Zustand haben, RequestedPrivateIPwährend der andere den gleichen Zustand haben sollte, aber negiert, z DidNotRequestPrivateIP.

"InstanceWithPrivateIp": {
    "Type": "AWS::EC2::Instance",
    "Condition": "RequestedPrivateIP",
    "Properties": {
        [...]
    }
},

"InstanceWithoutPrivateIp": {
    "Type": "AWS::EC2::Instance",
    "Condition": "DidNotRequestPrivateIP",
    "Properties": {
        [...]
    }
}
Bazze
quelle
1
Das ist in der Tat eine Option, verstößt aber ernsthaft gegen das DRY-Prinzip (Don't Repeat Yourself), das ich nicht gerne mache. Außerdem gibt es häufig andere Eigenschaften, die festgelegt werden können oder nicht, z. B. ob ELB HTTPS überwacht, basierend darauf, ob ein SSL-Zertifikat festgelegt wurde. Der Versuch, all diese kleinen Abweichungen durch Wiederholen aller Erklärungen mit einer geringfügigen Änderung zu erfassen, würde schnell zu einer massiven, nicht wartbaren Vorlage führen. Aber trotzdem danke für den Vorschlag.
MLu
Ich stimme dir voll und ganz zu @MLu, das Wiederholen macht nie Spaß. Aufgrund meiner Erfahrung mit CloudFormation sind Sie jedoch manchmal gezwungen, sich zu wiederholen. Die andere Lösung, die ich sehe, besteht darin, stattdessen Teilstapel zu erstellen, die Sie in die oben genannten Bedingungen aufnehmen, und dann in diesen Teilstapeln Dinge zu tun, die für diese Bedingung spezifisch sind.
Bazze