คุณสมบัติตามเงื่อนไขใน AWS CloudFormation


10

เรามีเทมเพลต AWS CloudFormation สำหรับสร้างอินสแตนซ์ EC2 บางตัว อย่างไรก็ตามผู้ใช้บางรายจำเป็นต้องระบุอย่างเฉพาะเจาะจงPrivateIpAddressและฉันพยายามหาวิธีรวมสิ่งนั้นเข้ากับเทมเพลต

สำหรับตอนนี้ฉันมีพารามิเตอร์แม่แบบและการสร้างเงื่อนไขPrivateIP RequestedPrivateIPจนถึงตอนนี้ดีมาก อย่างไรก็ตามฉันไม่สามารถหาวิธีรวมเข้ากับAWS::EC2::Instanceข้อมูลจำเพาะของทรัพยากรได้ ฉันลองสิ่งนี้:

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

แต่นั่นล้มเหลวเมื่อRequestedPrivateIPเป็นเท็จด้วย

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

ความคิดใด ๆ วิธีกำหนดทางเลือกคง IP ส่วนตัวคงที่และหากไม่ได้ระบุไว้ให้ AWS ตั้งค่าแบบไดนามิก?

คำตอบ:



0

เนื่องจากดูเหมือนว่าPrivateIpAddressคุณสมบัติไม่สนับสนุนสตริงว่างเปล่าเนื่องจากเป็นค่าฉันจึงแนะนำให้สร้างทรัพยากรสองแห่งแยกจากAWS::EC2::Instanceกัน หนึ่งของพวกเขาจะมีสภาพของคุณRequestedPrivateIPในขณะที่คนอื่น ๆ ควรจะมีสภาพเหมือนกัน DidNotRequestPrivateIPแต่เมื่อตะกี้เช่น

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

"InstanceWithoutPrivateIp": {
    "Type": "AWS::EC2::Instance",
    "Condition": "DidNotRequestPrivateIP",
    "Properties": {
        [...]
    }
}

1
นั่นเป็นตัวเลือก แต่เป็นการทำลายหลักการ DRY (อย่าทำซ้ำตัวเองอย่างรุนแรง) ที่ฉันไม่อยากทำ นอกจากนี้ - มักจะมีคุณสมบัติอื่น ๆ ที่อาจจะมีหรือไม่มีการตั้งค่าเช่นว่า ELB จะฟัง HTTPS ตามว่ามีการตั้งค่าใบรับรอง SSL หรือไม่ การพยายามจับความแปรปรวนเล็กน้อยเหล่านี้ทั้งหมดโดยการทำซ้ำการประกาศทั้งหมดด้วยการเปลี่ยนแปลงเล็กน้อยจะนำไปสู่เทมเพลตที่ไม่สามารถทำลายได้ขนาดใหญ่ แต่ขอบคุณสำหรับคำแนะนำต่อไป
MLu

1
ฉันเห็นด้วยกับคุณอย่างเต็มที่ @MLu การทำซ้ำไม่เคยสนุก อย่างไรก็ตามจากประสบการณ์ของฉันกับ CloudFormation บางครั้งคุณถูกบังคับให้ทำซ้ำตัวเอง โซลูชันอื่นที่ฉันเห็นคือการสร้างชุดย่อยแทนที่คุณรวมกับเงื่อนไขที่ฉันกล่าวถึงข้างต้นและจากนั้นในชุดย่อยที่คุณทำสิ่งที่เฉพาะเจาะจงสำหรับเงื่อนไขที่
Bazze
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.