AWS Cloud Map のアイコン

AWS Cloud Map

アプリケーションリソースのサービスディスカバリを提供するサービス

何ができるか

AWS Cloud Map は、アプリケーションを構成するサービスやリソースの場所 (IP アドレス、URL など) を一元管理し、名前で検索できるようにするサービスディスカバリサービスです。マイクロサービスアーキテクチャにおいて、各サービスが互いの接続先を動的に発見できるようにします。DNS ベースと API ベースの 2 つのディスカバリ方式をサポートしています。

どのような場面で使うか

マイクロサービスアーキテクチャで、サービス間の通信先を動的に解決する場面で活用されています。たとえば、ECS や EKS 上のコンテナが増減した際に、接続先の情報を自動的に更新し、他のサービスが常に正しい接続先を取得できます。また、Lambda 関数やデータベースなど、コンテナ以外のリソースも含めた統合的なサービスレジストリとしても利用されます。 この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。

身近な例え

社内の電話帳に例えるとわかりやすいでしょう。大きな会社では社員が異動したり、新しい部署ができたりします。Cloud Map は常に最新の状態に保たれる電話帳で、「営業部の田中さん」と検索すれば、現在の内線番号 (IP アドレス) がすぐにわかります。社員が席を移動しても電話帳が自動更新されるため、古い番号にかけてしまう心配がありません。

Cloud Map とは

この記事は約 2 分で読めます。 AWS Cloud Map は、クラウド上のアプリケーションリソースを名前で管理・検索するためのサービスディスカバリサービスです。マイクロサービスでは、多数の小さなサービスが互いに通信しますが、各サービスの接続先 (IP アドレスやポート番号) はスケーリングやデプロイのたびに変わります。Cloud Map はこれらの接続情報を一元管理し、サービス名で問い合わせるだけで最新の接続先を返します。

DNS ベースと API ベースのディスカバリ

Cloud Map は 2 つのディスカバリ方式を提供しています。DNS ベースのディスカバリでは、サービス名を DNS 名として登録し、標準的な DNS クエリで接続先を解決します。既存のアプリケーションを変更せずに導入できる利点があります。API ベースのディスカバリでは、AWS SDK を使って接続先を取得します。IP アドレスだけでなく、ポート番号やカスタム属性 (バージョン情報など) も取得できるため、より柔軟なルーティングが可能です。

ECS や EKS との連携

Cloud Map は Amazon ECS や Amazon EKS と統合されており、コンテナのデプロイ時に自動的にサービスインスタンスを登録・解除します。たとえば、ECS サービスのタスク数が 3 から 5 にスケールアウトすると、新しい 2 つのタスクの IP アドレスが Cloud Map に自動登録されます。タスクが停止すれば自動的に登録が解除されるため、手動でのメンテナンスは不要です。

はじめかた

Cloud Map を使い始めるには、まず名前空間 (Namespace) を作成します。名前空間は DNS ベースまたは API ベースを選択できます。次に、名前空間内にサービスを作成し、サービスインスタンス (実際のリソースの接続情報) を登録します。ECS を使っている場合は、サービス定義で Cloud Map の統合を有効にするだけで、タスクの登録・解除が自動化されます。

Azure・オンプレミスとの比較

Azure の対応サービス Azure Service Fabric Naming Service / Azure DNS Private Resolver
オンプレミスでの対応手段 Consul、ZooKeeper、etcd などのサービスディスカバリツール

AWS の優位点

  • ECS や EKS との統合が標準で提供されており、コンテナのスケーリングに連動したサービス登録・解除が自動化される
  • DNS ベースと API ベースの 2 方式を同一サービスで提供しており、アプリケーションの要件に応じて柔軟に選択できる
  • Route 53 と統合されているため、DNS ベースのディスカバリで AWS のグローバル DNS インフラを活用できる

注意点

  • DNS ベースのディスカバリは DNS キャッシュの TTL に依存するため、接続先の変更が即座に反映されない場合がある。リアルタイム性が必要な場合は API ベースを検討すること
  • Cloud Map のヘルスチェック機能を有効にすると、異常なインスタンスを自動的にディスカバリ結果から除外できる
  • 名前空間の種類 (DNS パブリック、DNS プライベート、API のみ) は作成後に変更できないため、用途に合った種類を事前に選択すること

さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。