VPC Latticeを使ってEC2インスタンス間のサービスネットワークを作成してみた。
概要
VPC Lattice は、複数のアカウントおよび VPC 間でサービス (EC2 インスタンス、コンテナ、Lambda 関数) を接続するために使用できる Amazon VPC の機能です。VPC Lattice は、VPC とアカウント間のネットワーク接続を自動的に処理します。VPC Lattice は、IPv4、IPv6、および重複する IP アドレス間のネットワーク アドレス変換も処理します。
この記事では、2 つの異なる VPC にある 2 つの EC2 インスタンス間にネットワークを作成してみました。
やってみた
前提条件
- 2 つの異なる VPC に 2 つのインスタンスを作成しておきます。
- 例: (VPC1の Test Instance 1と VPC2の Test Instance 2)
- HTTP リクエストに対して「Hello from Instance 1」と応答するインスタンス 1 と「Hello from Instance 2」と応答するインスタンス 2 に Web アプリを作成しておきます。
- VPC Lattice AWS-managed プレフィックスリストからの HTTP トラフィックを許可する受信ルールをセキュリティ グループに追加しておきます。
- CloudWatch ログ グループ [vpc-lattice-logs] を作成しておきます。
VPC Lattice のターゲットグループの作成
- VPC コンソールの [VPC Lattice] セクションから [Target groups] を選択し、[Create target group] をクリックしておきます。
- ターゲット タイプとして [Instances] を選択しておきます。
- ターゲット グループの名前を入力し、プロトコルとして HTTP を選択し、ポートとして 80 を入力しておきます。インスタンス 1 は VPC1 にあるため、VPC1 を選択し、プロトコル バージョンとして HTTP1 を選択しておきます。
- ヘルスチェックはデフォルトのままにして [Next] をクリックしておきます。[Test Instance1] をターゲットとして登録しておきます。
- 同様に、VPC2 にある [Test Instance 2] のターゲット グループを作成しておきます。
サービスネットワークの作成
- VPC コンソールの [VPC Lattice] セクションから [Service networks] を選択し、[Create service network] をクリックしておきます。
- サービス ネットワークの名前を入力しておきます。
- 両方の VPC をサービス ネットワークに関連付けます。他の設定はデフォルトのままにして、サービス ネットワークを作成しておきます。
VPC Lattice サービスの作成
- VPC コンソールの [VPC Lattice] セクションから [Services] を選択し、[Create service] をクリックしておきます。
- サービス名を入力し、必要に応じて説明を入力しておきます。
- [AWS IAM]を 認証タイプとして選択し、 [Apply policy template] を選択しておきます。アクセス ログを有効にし、ログの宛先として CloudWatch を選択し、以前に作成したログ グループを選択しておきます。
- 以下の設定でリスナーを追加しておきます。
- Protocol : HTTPS, Port: 443
- Default Action :
- test-instance-1-target, weight : 30 (75%)
- test-instance-2-target, weight : 10 (25%)
- 前の手順で作成したサービス ネットワークをサービスに関連付けます。他のすべての設定はデフォルトのままにして、VPC Lattice サービスを作成しておきます。
確認する
- VPC の 1 つに EC2 インスタンスを作成して、ネットワークをテストします。インスタンスに接続し、サービス ドメイン名を指定してcurlコマンドを実行しておきます。以下に示すように、インスタンス 1 からの応答の 4 分の 3 とインスタンス 2 からの応答の 4 分の 1 を取得します。
- サービスの詳細については、ログ グループを確認でsきます。
まとめ
VPC Lattice を使用すると、サービス ネットワークの作成と管理、サービス ネットワークの監視と共有が容易になります。VPC Lattice では、サービスがプロビジョニングされる時間、各サービスを通じて転送されるデータ量、リクエストの数に対して料金を支払います。
Reference: