17

AZ 당 하나의 서브넷을 사용하여 VPC를 생성하려는 cloudformation 스크립트가 있습니다. Cloudnet이 서브넷 생성을 위해 사용 가능한 영역을 쿼리하는 방법이 있습니까?

나는 실행하면 :

aws ec2 describe-availablity-zones 

나는 4 개 구역 반환받을 :

"ResourceStatusReason": "Value (us-east-1a) for parameter availabilityZone 
    is invalid. Subnets can currently only be created in the following 
    availability zones: us-east-1c, us-east-1b, us-east-1d.", 

: 내 스택을 만들려고 할 때

"AvailabilityZones": [ 
    { 
     "State": "available", 
     "RegionName": "us-east-1", 
     "Messages": [], 
     "ZoneName": "us-east-1a" 
    }, 
    { 
     "State": "available", 
     "RegionName": "us-east-1", 
     "Messages": [], 
     "ZoneName": "us-east-1b" 
    }, 
    { 
     "State": "available", 
     "RegionName": "us-east-1", 
     "Messages": [], 
     "ZoneName": "us-east-1c" 
    }, 
    { 
     "State": "available", 
     "RegionName": "us-east-1", 
     "Messages": [], 
     "ZoneName": "us-east-1d" 
    } 
] 

그러나, 나는 오류가 발생 AZ를

으로 지정합니다.
 "AvailabilityZone" : { 
     "Fn::Select" : [ "0", { "Fn::GetAZs" : "" } ] 
     }, 

AZ가 실제로 서브넷을 만들 수 있는지 확인하는 방법이 있습니까?

답변

6

불행히도 나는 같은 문제가있었습니다. CloudFormation에는이 작업을 수행 할 방법이 없으며 영역은 AWS 계정마다 다를 수 있습니다. 이것은 VPC 인프라의 한계이며 변경되지 않을 가능성이 있습니다.

"AvailabilityZone": 귀하의 유일한 옵션은 예를 들어, 대신 FN :: 선택의 당신의 CloudFOrmation 템플릿에서 발견 한 영역을 하드 코딩하는 것입니다 "우리를 동쪽-1B"당신이 떠날 경우 또는

AvailabilityZone 비어 있으면 기본 동작은 AWS가 자동으로 선택합니다.

+0

각 AZ에 서브넷이있는 VPC를 생성하기 때문에 비워 둘 수 없습니다. 반환되는 모든 AZ가 서브넷을 허용하지는 않습니다. – chris

+0

하나의 영역에서 VPC 서브넷을 허용하지 않는 경우 VPC에서 호스팅하는 영역은 무엇입니까? 해당 영역을 무시하고이를 지원하는 3 개 영역을 처리하십시오. – Arya

+0

이것은 수동 프로세스입니다. - 인덱스 0, 1 및 2를 사용하여 Fn :: Select를 기반으로 서브넷을 만드는 경우 실제 4 개의 AZ가 있기 때문에 때때로 실패합니다. 그러나 모든 서브넷이 서브넷을 허용하지는 않습니다. – chris

6

이것은 CLI 접근법이나 정확한 시나리오에는 도움이되지 않지만 AWS 관리 콘솔을 사용하면 원활하게 작동합니다.

최근에 CloudFormation Parameters가 업데이트되면 지정된 AZ와 관련된 AZ를 정확히 나타낼 수 있습니다.

이것은 DR/DR 드릴 중에 CFN 템플릿 지역 독립적 인 만들기에 매우 편리합니다. CloudFormation 매개 변수에 대한

enter image description here

"Parameters": { 
    "SubnetAZ": { 
     "Description": "Availability Zone of the Subnet", 
     "Type": "AWS::EC2::AvailabilityZone::Name" 
    } 
} 

추가 정보

+0

Fn :: GetAZs는 각 AZ에 서브넷이있는 기본 vpc가있는 한 사용 가능하고 사용 가능한 가용성 영역을 제공합니다! 그런데 새로운 aws 계정은 수동으로 삭제하지 않는 한 오래 유지됩니다. – hellomichibye

+0

@Naveen 당신의 발췌 문장에서 AWS :: EC2 :: AvailabilityZone :: Name 대신'List '을 사용했다고 생각합니다. – Somar

2

FN :: GetAZs는 당신이 각 AZ의 서브넷과 기본 VPC를 가지고 사용할 수있는 및 사용 가능한 가용 영역을 제공 할 것입니다! 그런데 새로운 aws 계정은 수동으로 삭제하지 않는 한 오래 유지됩니다.

+0

Fn :: GetAZs가 사용할 수 없게 되는 것을 보았습니다. 영역. –

+0

다음 기본 서브넷이 없습니다 – hellomichibye

+0

이것은 정말 흥미로운 _ "기능"_입니다. AWS Docs 어디서나 문서화되어 있습니까? –

-2

나는 표현의 매개체로서 json을 피함으로써 한계를 극복한다. 대류권을 사용하여 구름 형 템플릿을 작성합니다.()

그러나 각 지역에 대한 구름 형성 템플릿 배포와 관련하여 일종의 툴링을 배포해야합니다.

관련 문제