Properti Bersyarat di AWS CloudFormation

10

Kami punya templat AWS CloudFormation untuk membuat beberapa instance EC2. Namun beberapa dari mereka memerlukan spesifik PrivateIpAddressdan saya berjuang untuk mencari tahu bagaimana memasukkan itu ke template.

Untuk saat ini saya punya parameter templat PrivateIPdan kondisi menciptakan RequestedPrivateIP. Sejauh ini baik. Namun saya tidak tahu bagaimana cara memasukkannya ke AWS::EC2::Instancespesifikasi sumber daya. Saya mencoba ini:

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

Tetapi itu gagal ketika RequestedPrivateIPsalah dengan

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

Adakah yang tahu bagaimana cara menetapkan IP Privat statis dan jika tidak ditentukan biarkan ke AWS untuk mengatur yang dinamis?

MLu
sumber

Jawaban:

0

Karena sepertinya PrivateIpAddressproperti tidak mendukung string kosong seperti nilainya, saya sarankan membuat dua sumber daya Anda yang terpisah AWS::EC2::Instance. Salah satunya akan memiliki kondisi Anda RequestedPrivateIPsementara yang lain harus memiliki kondisi yang sama tetapi dinegasikan, misalnya DidNotRequestPrivateIP.

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

"InstanceWithoutPrivateIp": {
    "Type": "AWS::EC2::Instance",
    "Condition": "DidNotRequestPrivateIP",
    "Properties": {
        [...]
    }
}
Bazze
sumber
1
Itu memang pilihan tetapi sangat merusak prinsip KERING (Jangan Ulangi Diri Sendiri) yang tidak ingin saya lakukan. Selain itu - sering ada properti lain yang mungkin atau tidak dapat diatur, misalnya apakah ELB mendengarkan HTTPS berdasarkan apakah sertifikat SSL telah ditetapkan. Mencoba untuk menangkap semua variasi kecil ini dengan mengulangi semua deklarasi dengan sedikit perubahan akan dengan cepat menghasilkan templat besar yang tidak dapat dipertahankan. Tapi terima kasih atas sarannya.
MLu
1
Saya sepenuhnya setuju dengan Anda @ MLu, mengulangi tidak pernah menyenangkan. Namun, dari pengalaman saya dengan CloudFormation Anda kadang-kadang terpaksa mengulang sendiri. Solusi lain yang saya lihat adalah membuat subtack sebagai gantinya Anda memasukkan dengan kondisi yang saya sebutkan di atas dan kemudian dalam subtacks Anda melakukan hal-hal yang spesifik untuk kondisi itu.
Bazze