ども、ゲストのNTT東日本 大瀧です。
CloudFormationでVPCを作成するときにありがちなエラーとして、利用不可なアベイラビリティーゾーン(以下AZ)をテンプレートから指定するケースがあります。
AZ指定を抽象化するための組み込み関数 Fn::GetAZs
が利用できますが、これもデフォルトVPCへの依存性があり、たびたびトラブルになります。
一方で、アベイラビリティゾーンを一意に特定するためのAZIDがあり、これをCloudFormationのVPCサブネット作成時に指定できることに気づいたので、ブログでご紹介します。
CloudFormtaionテンプレートでAZIDを指定する
書き方は至ってシンプルです。VPCサブネットリソースのプロパティに AvailabilityZoneId
を指定します。
AWSTemplateFormatVersion: "2010-09-09"
Description: A sample template
Resources:
VPC:
Type: "AWS::EC2::VPC"
Properties:
CidrBlock: "172.31.0.0/20"
Subnet1:
Type: "AWS::EC2::Subnet"
Properties:
CidrBlock: "172.31.0.0/24"
AvailabilityZoneId: "apne1-az1"
VpcId: !Ref VPC
Subnet2:
Type: "AWS::EC2::Subnet"
Properties:
CidrBlock: "172.31.1.0/24"
AvailabilityZoneId: "apne1-az2"
VpcId: !Ref VPC
まとめ
CloudFormationテンプレート内でAZIDを指定する AvailabilityZoneId
プロパティをご紹介しました。
多くのAWSアカウントでは apne1-az1
と apne1-az2
が利用できると思いますので、3AZを求められるケースでなければこの2AZ指定で概ね事足りるかなぁ、と淡い期待をもってしばらく運用してみます。