10
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

セゾンテクノロジーAdvent Calendar 2024

Day 1

Amazon ECSに対応したAmazon VPC Latticeで自社製品コンテナ(HULFT10)を動かせるのか試してみた

Posted at

この記事は セゾンテクノロジー Advent Calendar 2024 シリーズ2 1日目の記事です。
シリーズ2は HULFT10 のエンジニアによる投稿をお届けします。

初めに

先日AWSより以下の発表がありました。

Amazon VPC Lattice が Amazon Elastic Container Service (Amazon ECS) のサポートを開始

ECS とのネイティブな統合により、ECS サービスを VPC Lattice ターゲットグループに直接関連付けることができるため、中間の Application Load Balancer (ALB) が不要になります。この合理化された統合により、コスト、運用上のオーバーヘッド、複雑さが軽減されると同時に、ECS と VPC Lattice の両方の完全な機能セットを活用できるようになります。

VPC Latticeを使用することでALBが不要になるということだったので、ALBを利用する前提で開発していたコンテナをALB無しで動かせるか気になったので試してみました。

利用するコンテナ

今回検証に使用するのは自社製品として開発している HULFT10 の HULFT10 for Container Services です。
AWS Marketplaceで出品させていただいているファイル転送を行うコンテナ製品です。

提供しているCFnで導入した際の構成図は以下のようになっています。

image.png

ECS on EC2 にアクセスするためのALBが2つ、NLBが1つあり、別VPCのEFSや製品間通信のためにVPC Peeringが行われています。

この構成で導入されているHULFT10をVPC Latticeを使用する形に変更して管理しやすくなるのかを検証します。

VPC Latticeの導入

VPC Latticeについては右も左もわかりませんが、とりあえずVPC Latticeのページを開き、上から順に設定していってみます。
image.png

ターゲットグループの作成まで進んでから気づいたのですが、公式ブログに詳細な手順が記載されていました。
ECSサービスページからターゲットグループの登録をした後に、VPC Latticeページでサービスの作成、サービスネットワークの作成と進むのが良いようです。
https://aws.amazon.com/jp/blogs/aws/streamline-container-application-networking-with-native-amazon-ecs-support-in-amazon-vpc-lattice/

以下の記事は私がやったこと順で記載しています。ご了承ください。

サービスネットワークの設定

識別子

image.png

分かりやすい名前を指定します。

サービスの関連付け

image.png

まだサービスを作成していないので何も選択できません。おそらく後で設定できると思うので空のままにします。

VPCの関連付け

image.png

VPCの関連付けは、サービスを呼び出せるVPCを設定するようです。呼び出し対象になると思われるHULFT10導入VPCを指定してよいのかは微妙ですが、いったん指定見ることにします。
まだよくわかっていないのでセキュリティグループの設定はいったんそのままにしています。

ネットワークアクセス

image.png

IAM認証による認証を提供する設定を有効にします。
テンプレートから認証されたアクセスのみを許可としています。
ポリシーの記載内容からも、IAM認証さえされていればどのアカウントでも権限関係なくアクセスできそうです。

Share service netowrk

image.png

AWS Organizations 単位の共有が可能になるようです。今回は何も設定しません。

モニタリング

image.png
トラフィックログを取得できるようです。今回はCloudWatchに出力する設定にしました。

概要

image.png

以上の内容で作成します。

サービスの作成

識別子

image.png

カスタムドメイン

image.png

自動で生成されるドメインを使用することで、ドメインやACMの管理をせずにTLSを利用することができるようです。

サービスアクセス

image.png

説明を読むに、サービスネットワークの許可設定に加えて、サービス側でさらに厳しい許可設定を行うことができるようです。

Share service、モニタリング

サービスネットワークの設定と同様のため省略

ルーティングを定義

image.png

リスナールールの追加

Rule identifiers

image.png

Rule Conditions

リクエストの割り振りを、メソッド、パス、ヘッダーから決めることができます。
全て一致するリクエストの時にターゲットグループに振り分けられるようです。

image.png

image.png

image.png

まだ選択できるターゲットグループがないので、404固定で保存します。

リスナーのデフォルトアクション

image.png

上記で設定したリスナーのどれにも当てはまらなかった場合に返されるレスポンス。
500固定にします。

HTTPS リスナー証明書の設定

image.png

サービスで生成されたDNSを利用しているため、証明書を設定する必要はありません。

ネットワークの関連付けを作成

image.png

確認と作成を実施します。

ターゲットグループの設定(失敗編)

ECSとの統合の場合、ターゲットグループの指定はECS側で行う必要があります。
以下はVPC Lattice側で設定しようとしてうまくいかなかった方法です。

グループの詳細の指定

image.png

まだ一つだけ翻訳されていないECS、EKSとの統合についての説明が記載されているIPアドレスタイプを選択します。

image.png

image.png

プロトコルはVPC LatticeがTLS終端を行う想定でHTTPです。
VPCにはサービスネットワークとして登録したものと同じVPCを指定します。
ここら辺の設定はALBのターゲットグループと変わりないです。

ターゲットの登録

image.png

想定ではここにECSコンテナのIPが表示されるはずなのですが困りました……
ALBへのターゲットグループ登録の際はALB側ではなくECS側からターゲットグループの設定を行うので、VPC Latticeでも同じように設定を行うものなのかもしれません。

ターゲットグループの設定(成功編)

ECSから既存サービスの更新画面を開き、VPC Lattice設定のタブを開きます。

image.png

image.png

インフラストラクチャロールがなかったので、新しいインフラストラクチャロールを作成します。

image.png

ユースケースからサービスにECSを選ぶことで、VPC Lattice用の選択肢が表示されました。

image.png

ポリシーもECSで検索することで、VPC Lattice用のポリシーを見つけることができました。

image.png

作成したインフラストラクチャロールをセットし、ターゲットグループの設定を行います。
ポート名の部分はタスク定義で定義されているものが表示されました。

image.png

サービスページの「設定とネットワーク」に VPC Lattice についての項目が増えていました。

image.png

VPC Lattice のほうでもターゲットグループが設定されていることを確認できました。

サービスへのターゲット登録

image.png

サービスのリスナールールで先ほど作成したターゲットグループを指定します。

image.png

ECSのページでも設定されていることを確認できました。

セキュリティグループの設定

image.png

ターゲットグループへのヘルスチェックがうまく行えていませんでした。

image.png

VPC Lattice からの接続をプレフィックスリストで許可します。
https://docs.aws.amazon.com/ja_jp/vpc-lattice/latest/ug/security-groups.html

image.png

ヘルスチェックが正常になったことを確認できました。

コンテナへの接続

image.png

ローカルの端末からインターネット経由で接続できるのか、サービスのドメイン名を名前解決できるか試しましたが、解決することができませんでした。
VPC Latticeはサービスネットワークに登録されたVPCからサービスへの接続を管理するサービスのため、VPC内で使用されるDNSにのみ登録されるようです。
つまり、VPC Latticeの機能のみではパブリックなエンドポイントを作成することはできず、ALBやAPI Gatewayなどを経由する必要があるそうです。

初歩的な部分ですが知らなかったので、勉強になりました。
また、ここでやりたいことができないということが分かったので、今回の検証はここまでとしたいと思います。

まとめ

VPC Lattice を実際に触ることで、今できること、今後に期待できることを整理することができました。
個人的に良いと思えたところ、まだ使えないと思えたところを以下に記載します。

良かったところ

  • ドメインを用意しなくとも、サービス側でドメインを用意してくれてHTTPSによる接続を行うことができる
  • VPC LatticeのリスナーとECSコンテナのルーティング設定をGUI上で簡単に行うことができた
  • VPC Peeringをせずとも、複数VPC間での接続を行うことができる

まだ使うのが難しいと思えたところ

  • パブリックからVPC Lattice内のサービスに接続するためには別途プロキシとなるサービスが必要
    • 規模が大きいシステムに組み込む際は共通のエンドポイントを使用できるようになるためメリットとなるが、単一のシステムとして導入する際にはNLBやALBを使用することになるので、元の構成より冗長になる
  • リスナーで対応しているプロトコルがまだ少ない
    • HULFTではWSS(WebSocketSecure)を利用しているため、ALB同様にWSSに対応しないと使用することが難しそうです
  • TLS接続をサポートするにはカスタムドメインを利用する必要がある
    • HULFTではNLBによる接続も利用しているため、TLSを使用するリスナーも利用したかったのですが、リスナーでTLSタイプを使用するにはサービス作成時にカスタムドメインを指定する必要があり、メリットとして上げた独自ドメインを用意する必要がないというメリットを受けることができなくなります

感想

VPC Latticeというサービスを名前だけ知っている状態であったため、どのようなことができ、どのような設定項目があるのかを今回の検証で学ぶことができ良かったです。
現状では製品構成に組み込むのは難しいという結論になりましたが、AWSのサービスは進化が早いため数年後には現状の懸念点をすべて解決している可能性もあります。今後も継続して情報を追っていきたいと思います。

10
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?