CloudFormation で VPC プレフィックスリスト(PrefixList) を作成してみた
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