[アップデート] AWS Elastic Beanstalk でロードバランサーに IPv6 もサポートするデュアルスタック設定ができるようになりました
いわさです。
AWS Elastic Beanstalk ではロードバランサーを使った負荷分散構成を取ることができます。
パブリックロードバランサーにした場合、これまでロードバランサーの IP アドレスタイプは IPv4 のみをサポートしていたのですが、IPv6 が使えるデュアルスタックを選択できるようになりました。
Elastic Beanstalk では色々な環境の作成方法がありまして、今回のオプションも全ての構築パターンで利用可能です。
私は今回マネジメントコンソールから作成してみたので紹介します。
マネジメントコンソールから作成
今回も前提となる IPv6 CIDR を割り当てている VPC やサブネット、ルートテーブルなどを事前に準備しておきましょう。
こんな感じです。
VPC作成テンプレート
AWSTemplateFormatVersion: '2010-09-09'
Description: 'IPv6-only ALB with fixed response in new VPC'
Resources:
# VPC
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsHostnames: true
EnableDnsSupport: true
Tags:
- Key: Name
Value: IPv6-ALB-VPC
# IPv6 CIDR Block
IPv6CidrBlock:
Type: AWS::EC2::VPCCidrBlock
Properties:
VpcId: !Ref VPC
AmazonProvidedIpv6CidrBlock: true
# Internet Gateway
InternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: IPv6-ALB-IGW
AttachGateway:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref VPC
InternetGatewayId: !Ref InternetGateway
# Public Subnets
PublicSubnet1:
Type: AWS::EC2::Subnet
DependsOn: IPv6CidrBlock
Properties:
VpcId: !Ref VPC
CidrBlock: 10.0.1.0/24
Ipv6CidrBlock: !Select [0, !Cidr [!Select [0, !GetAtt VPC.Ipv6CidrBlocks], 256, 64]]
AvailabilityZone: !Select [0, !GetAZs '']
MapPublicIpOnLaunch: false
AssignIpv6AddressOnCreation: true
Tags:
- Key: Name
Value: IPv6-ALB-PublicSubnet1
PublicSubnet2:
Type: AWS::EC2::Subnet
DependsOn: IPv6CidrBlock
Properties:
VpcId: !Ref VPC
CidrBlock: 10.0.2.0/24
Ipv6CidrBlock: !Select [1, !Cidr [!Select [0, !GetAtt VPC.Ipv6CidrBlocks], 256, 64]]
AvailabilityZone: !Select [1, !GetAZs '']
MapPublicIpOnLaunch: false
AssignIpv6AddressOnCreation: true
Tags:
- Key: Name
Value: IPv6-ALB-PublicSubnet2
# Route Table
PublicRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: IPv6-ALB-PublicRouteTable
# IPv4 Route
PublicRoute:
Type: AWS::EC2::Route
DependsOn: AttachGateway
Properties:
RouteTableId: !Ref PublicRouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref InternetGateway
# IPv6 Route
PublicRouteIPv6:
Type: AWS::EC2::Route
DependsOn: AttachGateway
Properties:
RouteTableId: !Ref PublicRouteTable
DestinationIpv6CidrBlock: ::/0
GatewayId: !Ref InternetGateway
# Route Table Associations
PublicSubnetRouteTableAssociation1:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PublicSubnet1
RouteTableId: !Ref PublicRouteTable
PublicSubnetRouteTableAssociation2:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PublicSubnet2
RouteTableId: !Ref PublicRouteTable
ではここから Elastic Beanstalk のリソースを作成していきます。
ちなみに.ebextensions
を使う場合は次のように設定することで有効化が可能です。[1]
option_settings:
aws:elbv2:loadbalancer:
IpAddressType: dualstack
新規環境を作成します。
まず、「ネットワーキング、データベース、およびタブをセットアップ」のステップでは先程作成した IPv6 CIDR 割り当て済みの VPC を選択します。
このステップでは特に IPv6 の指定などはありません。
そして次の「インスタンスのトラフィックとスケーリングを設定」ステップが重要なポイントになります。
まず、今回の設定は単一インスタンス環境ではなくロードバランサーをデプロイする必要があるので、「容量」の環境タイプで「負荷分散」を指定します。
そうすると、次のようにロードバランサーのネットワーク設定やタイプが指定できるようになります。
このロドーバランサーのネットワーク設定で「デュアルスタック(IPv4 および IPv6)」がオプションで有効化できるようになっています。デフォルトは OFF になっていました。
「IPv6 のみ」の選択肢はないですね。
あとは上記を ON にして環境を作成するだけです。手順としては非常に簡単ですね。
なお、既存環境の場合でも Elastic Beanstalk コンソールのロードバランサー構成の設定から IP アドレスタイプを変更できますのでそこから有効化が可能です。
有効化後に作成されたロードバランサーを確認してみると、次のように Dualstack タイプでロードバランサーが作成されていることが確認できます。
さいごに
本日は AWS Elastic Beanstalk でロードバランサーに IPv6 もサポートするデュアルスタック設定ができるようになったので使ってみました。
最初設定箇所がわからなくて迷ったのですが、環境タイプで「負荷分散」を選択した時だけ設定できるオプションでした。
先日の CloudFront のやつもそうですが、また最近 IPv6 関係のアップデートが増えてきていますね。今後 IPv6 のみオプションも設定できるようになると良いですね。