この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
AWS事業本部、福岡オフィスの梶原です。
先日のAWSのアップデートでVPCに複数のCIDRブロックをまとめたプレフィックスリストを作成し、SecurityGroupやRouteTableで使用することが可能になりました。
便利に使えるのですが、CloudFormationで管理したくなったので、さっくり作ってみました。
サンプルとして、プライベートIPアドレス (Class A, B, C) でCloudFormationテンプレートを作ってみましたので、共有します。
内容を変更しご自由にご活用ください
注意事項
- CloudFormationの入力パラメータで更新可能なテンプレートにしていますが、最大エントリ数、アドレスファミリー(IPv4|IPv6)は作成時に指定したものから変更できませんのでご注意ください
- アドレスブロックは5つまでパラメータで設定可能にしていますが、6つ以上入力指定したい場合は適時編集しパラメータを追加してください。(CidrBlockXXXの部分)
- 最大エントリ数と入力したCIDRブロックの数は一致する必要はなく、後から追加することも可能です。(作成時に指定した最大エントリ数まで)
テンプレート
AWSTemplateFormatVersion: 2010-09-09
Description: Create VPC Prefixlist
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
- Parameters:
- PrefixListName
- AddressFamily
- MaxEntries
- CidrBlock1
- CidrBlock2
- CidrBlock3
- CidrBlock4
- CidrBlock5
Parameters:
PrefixListName:
Type: String
Default: PrivateIPAddresses
Description: A name for the prefix list. The name cannot start with com.amazonaws.
AddressFamily:
Type: String
Default: IPv4
AllowedValues: [IPv4,IPv6]
Description: The IP address type. AddressFamily is not updatable.
MaxEntries:
Type: Number
Default: 10
MinValue: 1
MaxValue: 1000
Description: The maximum number of entries for the prefix list. MaxEntries is not updatable.
CidrBlock1:
Type: String
Default: "10.0.0.0/8"
Description: The CIDR blocks
CidrBlock2:
Type: String
Default: "172.16.0.0/12"
Description: The CIDR blocks
CidrBlock3:
Type: String
Default: "192.168.0.0/16"
Description: The CIDR blocks
CidrBlock4:
Type: String
Default: ""
Description: The CIDR blocks
CidrBlock5:
Type: String
Default: ""
Description: The CIDR blocks
Conditions:
IsEmpty1: !Equals [ !Ref CidrBlock1, '' ]
IsEmpty2: !Equals [ !Ref CidrBlock2, '' ]
IsEmpty3: !Equals [ !Ref CidrBlock3, '' ]
IsEmpty4: !Equals [ !Ref CidrBlock4, '' ]
IsEmpty5: !Equals [ !Ref CidrBlock5, '' ]
Resources:
PrivateAddressPrefixList:
Type: AWS::EC2::PrefixList
Properties:
AddressFamily: !Ref AddressFamily
Entries:
- !If [IsEmpty1, !Ref "AWS::NoValue", Cidr: !Ref CidrBlock1]
- !If [IsEmpty2, !Ref "AWS::NoValue", Cidr: !Ref CidrBlock2]
- !If [IsEmpty3, !Ref "AWS::NoValue", Cidr: !Ref CidrBlock3]
- !If [IsEmpty4, !Ref "AWS::NoValue", Cidr: !Ref CidrBlock4]
- !If [IsEmpty5, !Ref "AWS::NoValue", Cidr: !Ref CidrBlock5]
MaxEntries: !Ref MaxEntries
PrefixListName: !Ref PrefixListName
作成結果
参考情報
CloudFormation AWS::EC2::PrefixList https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-prefixlist.html
AWS > Documentation > Amazon EC2 > API Reference CreateManagedPrefixList https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateManagedPrefixList.html