NRIネットコム Blog

NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

VPC LatticeよくわからなかったがECSとネイティブ統合したので試してみた

ozawaです。めっきり寒くなりました。子供の保育園の送迎時はネックウォーマーにマスク、帽子と完全防備です。不審者感が増しました。
最近re:Inventのおこぼれ的なアップデートがよく出てきていますが、今回はECS関連で気になるアップデートがあったのでまとめてみます。

VPC LatticeとECSがネイティブ統合されました!

aws.amazon.com

すごい!、、、とはならず感想としては「そういえばLatticeって何ができるんやろう?」でした。
よくわからないけどECSとネイティブ統合されて気になったのでこの際試してみました。

VPC Latticeとは

以下、引用

Amazon VPC Lattice とは - Amazon VPC Lattice

Amazon VPC Lattice は、アプリケーションのサービスの接続、保護、モニタリングに使用する、フルマネージド型アプリケーションネットワーキングサービスです。VPC Lattice は、単一の仮想プライベートクラウド (VPC)、または 1 つ以上のアカウントの複数の VPC で使用できます。

なるほどわからん

とりあえず色々触ってみて理解したことをまとめます。

VPC Latticeの概念

ざっくりいうと、L7でVPC跨いでもインターネット介さずにアクセスできるネットワーク空間を作れるよ! です。

例えば、とあるVPC内のリソースを他VPC内のリソースからアクセスできる構成を考えます。
この場合、VPC PeeringやTransitGatewayを用いたハブスポーク構成で、プライベートなIPネットワーク空間でアクセスできるようにする、といった方式をとることができます。

VPC Latticeの場合は、L7(HTTP/HTTPS)のネットワーク空間を定義し、関連づけたVPC同士はその空間内でプライベート(Amazonネットワーク内)にアクセスすることができます。
なので、APIだけプライベートに公開したいんやで、という際にVPC PeeringやVPCをハブスポークな構成にしなくとも済みます。

VPC Latticeは3つの概念が基本になりますので、次章でざっくり説明します。

サービスネットワーク

L7でアクセスできるネットワーク空間を定義したものをサービスネットワークと呼ぶようです。サービスネットワークはこの空間内に関連づけられたVPCをまとめたものです。

VPCを複数関連づけてサービスネットワークを定義できますよの図

サービスネットワークに関連付けできるVPCは500個で、クロスアカウント/リージョンな構成も取れます。この辺はTransitGateway味がありますね。

VPCいっぱい関連付けできるよの図

サービス

VPC Latticeを用いて実際にアクセスすることができるエンドポイントを定義します。
具体的には対応するDNS名が払い出され、どのサービスネットワークに関連づけるかを設定できます。

サービスとして利用できるAWSサービスはEC2, ECS, EKS, Lambdaがあるようです。今回だとECSになります。

サービスネットワークにサービスが関連づけられるよの図

ターゲットグループ

AWSサービスをサービスとして利用できる、と言いましたが、実態はサービス内でルーティングするTargetGroupが必要になります。 TargetGroupでサービスをListenさせて、VPC Latticeのサービスとして登録し、これをサービスネットワークに関連づけると、このネットワーク内でプライベートにアクセスできる、といった仕組みです。

VPC Latticeを使ってプライベートにアクセスできるよの図

ECSとのネイティブ統合

今回のアップデートでは、ECSをサービスとして使う場合に必要だったInternal ALBが不要になり、ECSサービスの設定でVPC Latticeサービスに紐付けが可能になった、という内容です。
利用するに際してステップが省略できるのは良いですね。実際にどんな具合か試してみます。

実際にやってみた

今回は下記のような構成を作って検証しました。図は上述の図と全く同じです。

  • VPC を2つ用意
  • VPC-AにECSサービスを配置
  • VPC-BにEC2を配置して、VPC Latticeサービスに対してcurlを叩く

ちなみにやってみたブログは実はAWSからもう出てます。ので本記事ではポイントをかいつまんで説明します。

aws.amazon.com

ECSの設定

まずはECSサービスを作ります。順番としてはVPC Lattice側から設定するでもよさそうです。

VPC Lattice統合を有効化

コンソールから見ると早速項目が出来上がってますのでこちらから設定します。

ECSコンソールのLattice設定項目

ポイントとしては、この設定に対してインフラストラクチャロールというものを割り当てる必要があります。
中身としてはECSからVPC Latticeを使えるように知るためのポリシーを割り当てる必要があるようですが、こちらは AmazonECSInfrastructureRolePolicyForVpcLattice 管理ポリシーがありましたのでそちらを使います。

またVPC Latticeサービスに紐づけるためのTargetGroupを作成します。

VPC Latticeの設定

ECSサービスを作成したら、VPC Lattice側を設定します。
サービスネットワークとこれに紐づくサービスを作成し、↑で作成したECSサービスを関連づけます。

サービスネットワークの作成

ここではアクセスできるようにしたいVPCを関連づけます。やること自体はそこまで難しくないです。

作成すると snva- から始まるリソースが生成されます。おそらくServiceNetworkVPCAssociation の略です。

サービスネットワークのコンソール画面

サービスの作成

実際にアクセスさせたいサービスを作成します。

設定内容としてはALBに近いです。リスナールールを追加して転送させたいTargetGroupを追加します。

作成すると、サービスに対応する.awsドメインなDNS名が払い出されます。

Latticeサービスで.awsドメインなDNS名が払い出されるの図

サービスネットワークにサービスを関連づける

サービスは作成しただけではただのエンドポイントです。これを所定のネットワーク空間からアクセスできるようにするためにサービスネットワークに関連づけます。

EC2からcurl叩く

もう片方のVPCで起動させたEC2から↓の感じでcurlでアクセスしてみます。

curlコマンド叩くの図

できました!ちなみに今回はAWSが提供しているsample-ecsコンテナを使いました。

sample-ecs serviceに接続できたよの図

ちなみにListner設定で HTTP:443 設定したら勝手にAmazonの証明書差し込んでSSLにしてくれてました。

Amazonの証明書でSSL設定されてるの図

まとめ

名前は知っているもののあまり分かっていないサービスは沢山あるので、こういうタイミングで触ってみて学ぶことも大切ですね。
ECS使いとしてはこういった機能があるというのを押さえておくのも重要だと思いました。
APIだけサクッと共有したい&プライベートで!となった場合は良い選択肢になりそうです。

執筆者尾澤公亮

しがないインフラエンジニアです
AWSの入門書を執筆したりしてます

Twitter:@jstozw

Amazon 著者ページ:尾澤 公亮:作品一覧、著者略歴 - Amazon.co.jp