【IPv6 on AWS 】IaCでCIDR関連付けしてみた
こんにちは!AWS事業本部コンサルティング部のたかくに(@takakuni_)です。
今回は、IPv6アドレスをサブネットに動的に関連付けしてみようと思います。
VPC,サブネットとIPv6の関係性
まず初めに、AWSでIPv6アドレスを割り当てる際は、以下のようなルールがあります。
AWS所有のIPアドレスから割り当てる場合
- VPCは、「/56」の範囲でAWSのプールから自動的に割り当てられます
- サブネットは、「/64」の固定CIDRで割り当て可能です
つまり、AWSのプールから割り当てる場合、事前にIPv6アドレスの指定はできません。
Cidr,cidrsubnet関数について
CloudFormationのCidr
関数、Terraformのcidrsubnet
関数では、与えられたCIDR範囲からCIDR分割を行い結果を返す関数として使用できます。
そのため、今回のような、CIDR範囲が固定されている場合にとても使いやすい関数です。
使ってみた
今回は、VPCとサブネットを作成するコードを作成してみました。
CloudFormationのCIDR関数は、以下の引数で構成されています。
- 第一引数は、第三引数のリストから、何番目のCIDR範囲を使用するか
- 第二引数は、どのCIDR範囲を分割するか
- 第三引数は、第二引数のCIDR範囲から何個CIDR分割するか
- 第四引数は、第二引数のCIDRを何ビットでCIDR分割するか
AWSTemplateFormatVersion: "2010-09-09"
Description: "IPv6 on AWS Cidr function demo."
Resources:
ExampleVpc:
Type: AWS::EC2::VPC
Properties:
CidrBlock: "10.0.0.0/16"
Tags:
- Key: Name
Value: "example-ipv6-vpc"
IPv6CidrBlock:
Type: AWS::EC2::VPCCidrBlock
Properties:
AmazonProvidedIpv6CidrBlock: true
VpcId: !Ref ExampleVpc
ExampleSubnet:
Type: AWS::EC2::Subnet
DependsOn: IPv6CidrBlock
Properties:
AssignIpv6AddressOnCreation: true
CidrBlock: !Select [ 0, !Cidr [ !GetAtt ExampleVpc.CidrBlock, 1, 8 ]]
Ipv6CidrBlock: !Select [ 0, !Cidr [ !Select [ 0, !GetAtt ExampleVpc.Ipv6CidrBlocks], 1, 64 ]]
VpcId: !Ref ExampleVpc
Tags:
- Key: Name
Value: "example-ipv6-subnet"
Terraformのcidrsubnet関数は以下の引数で構成されています。
- 第一引数は、どのCIDR範囲を分割するか
- 第二引数は、第一引数のCIDRから何桁単位でCIDR分割するか
- 第三引数は、第二引数のリストから、何番目のCIDR範囲を使用するか
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
enable_dns_hostnames = true
enable_dns_support = true
assign_generated_ipv6_cidr_block = true
tags = {
Name = "example-ipv6-vpc"
}
}
resource "aws_subnet" "example" {
vpc_id = aws_vpc.example.id
cidr_block = cidrsubnet(aws_vpc.example.cidr_block, 8, 0)
assign_ipv6_address_on_creation = true
enable_dns64 = true
ipv6_cidr_block = cidrsubnet(aws_vpc.example.ipv6_cidr_block, 8, 0)
tags = {
Name = "example-ipv6-subnet"
}
}
分割するCIDR範囲に各関数の違いがある部分がとてもおもしろいです。
まとめ
今回は、動的にIPv6アドレスのCIDR分割してみました。IPv6 on AWSをIaCで行う場合は使えるtipsだと思いますので、参考にしていただけると嬉しいです。
以上、AWS事業本部コンサルティング部のたかくに(@takakuni_)でした!