AWS CloudFormation의 조건부 속성


10

일부 EC2 인스턴스를 생성하기위한 AWS CloudFormation 템플릿이 있습니다. 그러나 그중 일부는 특정 요구 사항 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에 맡겨 동적 IP를 설정합니까?

답변:



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 (Do n't Repeat Yourself) 원칙을 심각하게 위반합니다. 또한 ELB가 SSL 인증서 설정 여부에 따라 HTTPS를 수신하는지 여부와 같이 다른 속성이 설정되거나 설정되지 않을 수 있습니다. 약간의 변경만으로 모든 선언을 반복하여 이러한 작은 변형을 모두 잡으려고하면 신속하게 유지 관리 할 수없는 템플릿이 생깁니다. 그러나 어쨌든 제안에 감사드립니다.
MLu

1
@MLu에 전적으로 동의합니다. 반복하는 것은 결코 재미가 없습니다. 그러나 CloudFormation에 대한 나의 경험에서 언젠가는 스스로를 반복해야합니다. 내가 보는 다른 솔루션은 위에서 언급 한 조건에 포함시키는 대신 서브 스택을 생성 한 다음 해당 서브 스택에서 해당 조건에 맞는 작업을 수행하는 것입니다.
Bazze
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.