[アップデート] AWS App Runner のパブリックエンドポイントの IP アドレスタイプでデュアルスタックモードを構成出来るようになりました

2023.11.03

いわさです。

AWS App Runner のパブリックエンドポイントはこれまで IPv4 のみサポートされていたため何らかの形で IPv4 に変換していないと接続することが出来ませんでした。
しかし、先日のアップデートで IP アドレスタイプに IPv4/IPv6 をどちらもサポートするデュアルスタックが選択出来るようになりました。

App Runner のリリースノートにも記述されています。

設定方法は簡単で App Runner コンソールでサービスを作成・更新する際のネットワークオプションで次の設定が可能になっています。

AWS CLI でもサポートされていて、v1.29.77 以降で利用可能です。v2 もおそらくそのうち対応すると思います。

構成済みのサービスでデュアルスタックタイプを設定している際はネットワーキングの IP address type に Dual-stack と表示されます。

そもそも IPv6 対応してなかったのかという気づきがあったので、本日は今回の IP アドレスタイプオプションごとに IPv4 と IPv6 のクライアントからアクセスして挙動を確認してみましたので紹介します。

検証

まず、IPv4 オンリーな EC2 と IPv6 オンリーな EC2 を作成します。
「Amazon 提供のIPv6 CIDR ブロック」を割り当てする VPC を作成し、IPv4 のみを割り当てたパブリックサブネットと IPv6 のみを割り当てたパブリックサブネットを作成しました。

最新版だと少し UI が異なりますが、概ね以下の記事のとおり進めることが出来ました。

それぞれのサブネットに Amazon Linux 2023 の EC2 インスタンスを作成します。
IP アドレスを自動割り当てにしておき、IPv4 と IPv6 アドレスがそれぞれのインスタンスに割り当てられていることを確認します。
セキュリティグループやルートテーブルの設定は割愛しますが、この時点で SSH 接続が行えない場合はそのあたりからまず見直してみてください。私は IPv6 アウトバウンドのインターネットゲートウェイへのルートを設定し忘れていて SSH 接続するだけでちょっと手こずりました。

App Runner (IPv4) にアクセスしてみる

まずは従来の動作である、IPv4 タイプを構成し、先程作成したそれぞれの EC2 からリクエストを送信してみましょう。
予想では次のように、IPv6 オンリーな EC2 インスタンスからはアクセスが出来ないはずです。

なお、App Runner へデプロイするソースコードは次のものを使いました。
apprunner.yamlを追加しておいたので、面倒な設定は特に不要でそのままサービスが立ち上がるはずです。

ネットワーキング構成で、IPv4 を選択しましょう。

サービスが立ち上がったら、それぞれの EC2 からリクエストを送信してみます。

# IPv4 オンリー
[ec2-user@ip-10-0-9-189 ~]$ https://zwetprntzq.ap-northeast-1.awsapprunner.com/.com/
Hoge!

# IPv6 オンリー
[ec2-user@i-008a3170d5f429dd6 ~]$ curl https://zwetprntzq.ap-northeast-1.awsapprunner.com/
curl: (7) Failed to connect to zwetprntzq.ap-northeast-1.awsapprunner.com port 443 after 3239 ms: Couldn't connect to server

IPv6 オンリーな EC2 からの場合リクエスト送信に失敗しましたね。
HTTPS の接続に失敗しています。

App Runner (デュアルスタック) にアクセスしてみる

では続いて Dual-stack オプションで同じ用にサービスを作成してみます。
この場合は次のように、IPv4/IPv6 どちらからもアクセス出来るはずです。

ネットワーキングのオプションで Dual-stack を選択するだけ。

# IPv4 オンリー
[ec2-user@ip-10-0-9-189 ~]$ curl https://edafbsmu3p.ap-northeast-1.awsapprunner.com/
Hoge!

# IPv6 オンリー
[ec2-user@i-008a3170d5f429dd6 ~]$ curl https://edafbsmu3p.ap-northeast-1.awsapprunner.com/
Hoge!

どちらからもアクセス出来ることが確認出来ましたね。

さいごに

本日は AWS App Runner のパブリックエンドポイントの IP アドレスタイプでデュアルスタックモードを構成出来るようになったので、それぞれの構成でアクセス出来る場合と出来ない場合を実際に検証してみました。

デフォルトは IPv4 ですが、追加料金に関する記述もないので基本的にはデュアルスタックにしておくので良さそうかな?

なお、VPC 統合したプライベートなエンドポイントは引き続き IPv4 のみサポートされているようです。エンドポイントタイプの違いにご注意ください。

Currently, any network traffic originating from IPv6 endpoint cannot be received by App Runner services hosted in an Amazon Virtual Private Cloud (Amazon VPC). For all App Runner private services only IPv4 traffic is supported. For all outgoing traffic also only IPv4 is supported.

引用元:Enabling dual stack for public incoming traffic - AWS App Runner