まだre:Invent 2022開催直前ですが、フライング気味にいくつものAWSアップデートが早くも発信され始めています。
今回はその中でも 「マイクロサービス間の通信を簡単にしてくれる新機能、ECSサービスコネクト」 を日本語で少しだけ紹介してみます。
前提知識のおさらい
ECSって何でしたっけ?
AWS上で提供されているコンテナオーケストレーションサービスです。
コンテナの商用運用に不可欠な統合管理の仕組みを提供してくれます。
世の中的には代表的なOSSとしてKubernetesなどがあり、これはAWSでもEKSとしてマネージド提供されています。
サービスディスカバリーって何でしたっけ?
商用システムにおけるコンテナの代表的なユースケースとして「マイクロサービスアーキテクチャ」があります。
従来型のアプリケーションを「モノリシック(一枚岩)アーキテクチャ」と捉え直したときに、機能単位でサービスを分割して疎結合化し、サービス間の内部通信によってシステム全体としての挙動を実現しようというものです。
これによって、機能単位で開発が分業しやすくなったり、リリースサイクルを短くできるため昨今主流のアジャイル開発と親和性が高くなります。
マイクロサービスアーキテクチャの留意点として、システム内でサービス同士が通信しあうためにお互いのインフラ的な在り処を見つける必要があり、これを実現するための概念を「サービスディスカバリー」と言います。
似たようなAWSサービス、既にありませんでしたっけ?
AWSには元々、サービスディスカバリーを実現するための機能がいくつかありました。
- AWS Cloud Map
- AWSリソースを独自の名前空間で簡単に参照できる
- 例えばELBを構成せずともEC2リソースへ任意の名前でアプリケーションから通信できる
- ECS以外にもEC2、RDS、Lambda、DynamoDBなど様々なAWSリソースに対応
- サービスディスカバリー(ECSの機能)
- ECSクラスター内の各サービス間のプライベートな名前解決が可能になる
- この機能を使わない場合、サービス間にELBを構成する必要がある
- 前述のCloud Mapを利用して実現している
- AWS App Mesh
- サービス間通信のために、プロキシOSSであるEnvoy管理をマネージドに提供してくれる
- ECSだけでなく、EKSやその他EC2上で構築しているアプリケーションでも利用可能
- 一般的な類似製品としてOSSのIstio等がある
ECSサービスコネクトの概要
位置づけとしては「ECSの "サービス" の設定項目の一つ」になります。
- ECSクラスターやVPCを跨いだサービス間通信を可能にしてくれる
- サービス間通信のモニタリングも可能になる
- 既存のアプリケーションの変更不要
AWS News Blogにある図が分かりやすいですね。
ECSのサービスディスカバリーのように、Cloud Mapの名前空間と組み合わせて動作します。
設定によって、例えば「503エラーが出たら自動でリトライさせてコネクションドレイン(処理終了までコネクション保持)する」ようなこともELB無しで出来るようです。
さらにECSコンソールからトラフィックを監視できるダッシュボードも見られるとのこと。
コンソールも少しだけ覗いてみた
試しに適当なECSクラスターを作ってみると、クラスター編集画面でServie Connectを有効化できるようになっていました。
有効化するとクラスター設定画面から以下のように確認できます。
検証によさげなアプリケーションが無かったため、実際のトラフィック検証やモニタリングはまたの機会ということで!
(11/30追記)
AWS Samuraiの織田さんがハンズオン記事を書いてくださいました。
とても分かりやすいのでオススメです。内部的にはApp Meshが使われているんですね。
まとめ
ECSサービスコネクトはユースケースとして、
- ECSでマイクロサービスを運用していて
- クラスターやVPC跨ぎの通信を手軽に管理したい
という場合に有用な選択肢になりそうです。
App Meshを導入するほどじゃないけど、ECSを使ってちょっとしたマイクロサービスを構築したい…という際にはこれを使えば、ELBすら使わずにサービス間通信&モニタリングを実現できそうですね。