Thuộc tính có điều kiện trong AWS CloudFormation


10

Chúng tôi đã có một mẫu AWS CloudFormation để tạo một số phiên bản EC2. Tuy nhiên, một số trong đó yêu cầu cụ thể PrivateIpAddressvà tôi đang đấu tranh để tìm ra cách kết hợp điều đó với mẫu.

Hiện tại tôi đã có một tham số mẫu PrivateIPvà tạo Điều kiện RequestedPrivateIP. Càng xa càng tốt. Tuy nhiên tôi không thể tìm ra cách kết hợp nó với AWS::EC2::Instanceđặc tả tài nguyên. Tôi đã thử điều này:

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

Nhưng điều đó thất bại khi RequestedPrivateIPsai với

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

Bất kỳ ý tưởng nào về cách tùy chọn gán một IP riêng tĩnh và nếu không được chỉ định, hãy để nó cho AWS để đặt một IP động?

Câu trả lời:



0

Vì có vẻ như thuộc PrivateIpAddresstính không hỗ trợ một chuỗi rỗng vì nó có giá trị, tôi khuyên bạn nên tạo hai tài nguyên riêng biệt của bạn AWS::EC2::Instance. Một trong số họ sẽ có tình trạng của bạn RequestedPrivateIPtrong khi người còn lại sẽ có cùng điều kiện nhưng bị phủ nhận, ví dụ DidNotRequestPrivateIP.

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

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

1
Đó thực sự là một lựa chọn nhưng phá vỡ nghiêm trọng nguyên tắc DRY (Đừng lặp lại chính mình) mà tôi không muốn làm. Ngoài ra - thường có các thuộc tính khác có thể được đặt hoặc không, ví dụ, liệu ELB có nghe trên HTTPS hay không dựa trên việc chứng chỉ SSL đã được đặt hay chưa. Cố gắng nắm bắt tất cả các biến thể nhỏ này bằng cách lặp lại tất cả các khai báo với một thay đổi nhỏ sẽ nhanh chóng dẫn đến một khuôn mẫu lớn không thể nhầm lẫn. Nhưng dù sao cũng cảm ơn vì đã gợi ý.
MLu

Tôi hoàn toàn đồng ý với bạn @MLu, lặp lại không bao giờ là niềm vui. Tuy nhiên, từ kinh nghiệm của tôi với CloudFormation, đôi khi bạn buộc phải lặp lại chính mình. Giải pháp khác mà tôi thấy là tạo ra các trạm biến áp thay vì bạn bao gồm các điều kiện tôi đã đề cập ở trên và sau đó trong các trạm biến áp đó, bạn thực hiện các công cụ cụ thể cho điều kiện đó.
Bazze
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.