VPCのL2 ConstructでDual Stackがサポートされるのを待っていたところ、v2.121.0でサポートされていました。
今回はこちらを試してみます。
AWS CDK v2.121.0 新機能✨#cdk_releases
— Kenji Kono (@konokenj) 2024年1月15日
1/ Vpc L2コンストラクトでDual Stackを構成してIPv6を使用可能に。ipProtocolプロパティで設定します。デフォルトの挙動やサブネット設定はAPI ReferenceのOverviewをご覧ください。IPv4パブリックIPアドレスを削減したい方はぜひ。https://t.co/VxWdUzmD0i
※パブリックIPv4への課金が迫っているというのもホットな話題ですね。
目次
今回試すこと
前回の記事でGlobal Accelerator+ALBの構成を実装しました。 mazyu36.hatenablog.com
Global AcceleratorとALBはDual Stackをサポートしているので、こちらを題材にDual Stackを試してみます。
※IPv6に対応しているサービスは以下から確認可能です。
アーキテクチャ
今回構築するのは以下です。Global Accelerator、ALB、VPCを全てDual Stackとし、IPv6で通信ができるかを確認します。
前回の記事の構成から大きく以下2点を変更しています。 * ALBのターゲットをLambdaからEC2に変更しています。これはIPv6のターゲットグループだとIP or Instanceのターゲットしかサポートされていないためです(参考)。 * EC2で動確用にhttpdを設定したかったため、NAT Gatewayを用意しインターネットに抜けられるようにしています。
実装
以下にあります。
Dual Stack対応の部分だけ簡単に見ていきます。全部Dual Stackを指定するだけなので簡単です。
VPC
今回アップデートが入ったところです。ipProtocol
でDual Stackが指定できるようになりました。
const vpc = new ec2.Vpc(this, 'Vpc', { natGateways: 1, maxAzs: 2, subnetConfiguration: [ { name: 'PublicSubnet', subnetType: ec2.SubnetType.PUBLIC, }, { name: 'PrivateSubnet', subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS, } ], ipProtocol: ec2.IpProtocol.DUAL_STACK, // Dual Stack enableDnsHostnames: true, enableDnsSupport: true } )
ALB
ALBでもDual Stackを指定します。
const alb = new elbv2.ApplicationLoadBalancer(this, 'ApplicationLoadBalancer', { vpc: vpc, vpcSubnets: vpc.selectSubnets({ subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }), internetFacing: false, ipAddressType: elbv2.IpAddressType.DUAL_STACK // Dual Stack })
Global Accelerator
アクセラレータでもDual Stackを指定します。
const accelerator = new globalaccelerator.Accelerator(this, 'Accelerator', { ipAddressType: globalaccelerator.IpAddressType.DUAL_STACK // Dual Stack })
動作確認
デプロイ状況の確認
VPCはCIDRタブでIPv6が割り当てられていることが確認できます。
ALBを確認するとDualStackとなっています。
Global Acceleratorでは静的IPアドレスとしてIPv6が2つと、デュアルスタックDNS名が払い出されています。
接続確認
curlでデュアルスタックDNS名を元にIPv6で通信できるか確認したところ、無事通信ができました。
curl -v6 axxxxxx.dualstack.awsglobalaccelerator.com * Trying [2600:9000:a407:b741:9110:7384:34d9:2ea6]:80... * Connected to axxxxxx.dualstack.awsglobalaccelerator.com ([MASK]:34d9:2ea6) port 80 (#0) > GET / HTTP/1.1 > Host: axxxxxx.dualstack.awsglobalaccelerator.com > User-Agent: curl/8.1.2 > Accept: */* > < HTTP/1.1 200 OK < Date: Mon, 22 Jan 2024 15:05:56 GMT < Content-Type: text/html; charset=UTF-8 < Content-Length: 12 < Connection: keep-alive < Server: Apache/2.4.58 () < Upgrade: h2,h2c < Last-Modified: Mon, 22 Jan 2024 14:47:20 GMT < ETag: "c-60f89e82ab318" < Accept-Ranges: bytes < Hello World * Connection #0 to host axxxxxx.dualstack.awsglobalaccelerator.com left intact
digでデュアルスタックDNS名でAAAAアドレスを問い合わせると、静的IPアドレスが2つ返ってきます(結果は省略)
dig axxxxxx.dualstack.awsglobalaccelerator.com AAAA +short
終わりに
VPCのL2 ConstructのDual Stack対応により、簡単にIPv6対応が可能になりました。パブリックIPv4の削減が捗りそうです。
一方で課金対策として完全なIPv6オンリーの構成を組むことは、まだまだ難しい認識なのでここは今後のAWSのサービスのアップデートに期待したいところです。