サービスディスカバリ - AWS Cloud Map でマイクロサービスの接続を自動化する

AWS Cloud Map を使ったサービスディスカバリの構築を解説。DNS ベース・API ベースのサービス検出、ECS/EKS との統合、App Mesh との連携を紹介します。

サービスディスカバリの課題

マイクロサービスアーキテクチャでは、サービス間の通信先をどう解決するかが重要な課題です。モノリシックなアプリケーションでは通信先が固定的ですが、マイクロサービスではコンテナの起動・停止、Auto Scaling、デプロイによって IP アドレスが動的に変化します。ロードバランサー (ALB) を各サービスの前段に配置する方法もありますが、サービス数が増えるとコストと管理の複雑さが増大します。AWS Cloud Map は、マイクロサービスのエンドポイントを名前空間で一元管理するサービスディスカバリサービスです。各サービスのインスタンス (IP アドレス、ポート、カスタム属性) をレジストリに登録し、他のサービスが名前で接続先を検索できます。DNS ベースと API ベースの 2 つのディスカバリ方式を提供し、ユースケースに応じて選択できます。

この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。

名前空間とサービスの登録

Cloud Map は名前空間 (Namespace) → サービス (Service) → インスタンス (Instance) の 3 層構造で管理します。名前空間は DNS ベース (パブリック DNS またはプライベート DNS) と API ベース (HTTP) の 2 種類があります。DNS 名前空間では、サービス名が DNS レコードとして登録され、標準的な DNS クエリで接続先を解決できます。たとえば payment.myapp.local という DNS 名で payment サービスの IP アドレスを取得できます。API 名前空間では、DiscoverInstances API でサービスを検索し、カスタム属性 (バージョン、環境、リージョンなど) によるフィルタリングが可能です。 ```bash # プライベート DNS 名前空間の作成 aws servicediscovery create-private-dns-namespace \ --name myapp.local \ --vpc vpc-12345 \ --region ap-northeast-1 # サービスの登録 aws servicediscovery create-service \ --name payment \ --namespace-id ns-xxxx \ --dns-config '{"DnsRecords":[{"Type":"A","TTL":10}]}' ``` インスタンスの登録・解除は手動 (API 呼び出し) または ECS/EKS との統合で自動的に行われます。

ECS 統合とヘルスチェック

Cloud Map と ECS のネイティブ統合により、ECS サービスのタスクが起動すると自動的に Cloud Map にインスタンスが登録され、タスクが停止すると自動的に解除されます。ECS サービス定義で serviceRegistries を指定するだけで統合が完了します。これにより、サービス間通信で ALB を経由せずに、Cloud Map の DNS 名で直接タスクの IP アドレスを解決して通信できます。ALB のコスト (月額約 22 USD〜/台) を削減でき、レイテンシも低減します。ヘルスチェックは 2 種類をサポートします。Route 53 ヘルスチェックはパブリック IP を持つインスタンスに対して HTTP/HTTPS/TCP のヘルスチェックを実行します。カスタムヘルスチェックはアプリケーション側から UpdateInstanceCustomHealthStatus API を呼び出してヘルス状態を報告します。ECS 統合の場合、ECS のタスクヘルスチェックと連動するため、追加のヘルスチェック設定は通常不要です。

App Mesh との連携と料金

AWS App Mesh (サービスメッシュ) は Cloud Map をサービスディスカバリバックエンドとして使用します。App Mesh の仮想サービスに Cloud Map のサービスを関連付けることで、Envoy プロキシが Cloud Map からエンドポイントを自動取得し、トラフィックルーティング、リトライ、サーキットブレーカーなどのメッシュ機能を適用します。EKS 環境では、AWS Cloud Map Controller for Kubernetes を使用して、Kubernetes の Service リソースと Cloud Map を自動同期できます。料金は名前空間あたり 0.10 USD/月、インスタンス登録 1,000 件あたり 0.10 USD、DiscoverInstances API 100 万クエリあたり 1.00 USD です。DNS クエリは Route 53 の料金 (100 万クエリあたり 0.40 USD) が適用されます。小〜中規模のマイクロサービス環境では月額数ドル程度で利用できます。

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

まとめ - Cloud Map の活用指針

AWS Cloud Map は、マイクロサービスのエンドポイントを一元管理するサービスディスカバリサービスです。DNS ベースと API ベースの 2 つのディスカバリ方式、ECS とのネイティブ統合、ヘルスチェックによる異常インスタンスの自動除外が主な強みです。ECS でマイクロサービスを運用する場合、サービス間通信に ALB を使用する代わりに Cloud Map を採用することで、コスト削減とレイテンシ低減を実現できます。

AWS の優位点

  • マイクロサービスのエンドポイント (IP アドレス、ポート、URL) を名前空間で一元管理し、サービス間の接続を自動化
  • DNS ベースのサービスディスカバリで、サービス名を DNS クエリで解決して接続先を取得
  • API ベース (DiscoverInstances API) のサービスディスカバリで、カスタム属性によるフィルタリングが可能
  • ECS サービスとネイティブ統合し、タスクの起動・停止に応じてサービスレジストリが自動更新
  • ヘルスチェック (Route 53 ヘルスチェックまたはカスタムヘルスチェック) で異常なインスタンスを自動的に除外
  • App Mesh (サービスメッシュ) のサービスディスカバリバックエンドとして使用可能
  • 名前空間あたり 0.10 USD/月、インスタンス登録 1,000 件あたり 0.10 USD、DiscoverInstances API 100 万クエリあたり 1.00 USD

同じテーマの記事

コンテンツ配信ネットワーク - AWS CloudFront と Azure CDN の比較 AWS CloudFront と Azure CDN を比較し、グローバルエッジネットワークを活用した高速コンテンツ配信サービスとしての CloudFront の優位性を解説します。 専用線接続の設計 - Direct Connect による安定した閉域網接続の実現 AWS Direct Connect を活用した専用線接続の設計手法を解説し、専用接続とホスト接続の選択、冗長構成、VPC との統合による安定した閉域網接続の実現方法を紹介します。 DNS とドメイン管理 - AWS と Azure の比較 AWS と Azure の DNS サービスを比較し、Route 53 の 100% 可用性 SLA と高度なルーティング機能を中心とした AWS の DNS 管理の優位性を解説します。 DNS サービス - AWS Route 53 と Azure DNS の比較 AWS Route 53 と Azure DNS を比較し、高可用性 DNS サービスとしての Route 53 のルーティングポリシーとヘルスチェック機能の優位性を解説します。 エッジコンピューティング - AWS と Azure の比較 AWS と Azure のエッジコンピューティングサービスを比較し、CloudFront と Lambda@Edge を中心とした AWS のエッジコンピューティング基盤の優位性を解説します。 グローバルネットワーク高速化 - AWS Global Accelerator と CloudFront で実現する低レイテンシ配信 AWS Global Accelerator と Amazon CloudFront を活用したグローバルネットワーク高速化の設計・運用方法を解説します。Azure Front Door やオンプレミスの CDN と比較し、AWS のネットワーク高速化サービスが持つパフォーマンス、可用性、運用効率の優位性を紹介します。 ロードバランシング戦略 - AWS ELB と Azure Load Balancer の比較 AWS Elastic Load Balancing と Azure Load Balancer を比較し、ALB/NLB/GLB の使い分けと EC2 Auto Scaling 連携による高可用性アーキテクチャの優位性を解説します。 ネットワーク自動化 - AWS と Azure の比較 AWS VPC、CloudFormation、Systems Manager を活用したネットワーク自動化を Azure と比較し、Infrastructure as Code によるネットワーク構成管理の AWS の優位性を解説します。 ネットワーク可観測性 - AWS VPC Flow Logs vs Azure Network Watcher AWS VPC Flow Logs・CloudWatch・Network Access Analyzer と Azure Network Watcher を比較し、ネットワークトラフィックの可視化、異常検知、トラブルシューティングの違いを解説します。 ネットワーキングとコンテンツ配信 - AWS と Azure の比較 AWS と Azure のネットワーキング・CDN サービスを比較し、VPC・CloudFront・Route 53 を中心とした AWS のネットワークインフラの優位性を解説します。 プライベートリンクエンドポイント - AWS PrivateLink vs Azure Private Link AWS PrivateLink と Azure Private Link のプライベート接続機能を比較し、VPC エンドポイントの種類、対応サービス数、料金体系、セキュリティモデルの違いを具体的に解説します。 仮想プライベートクラウド - AWS VPC と Azure VNet の比較 AWS VPC と Azure Virtual Network を比較し、クラウド上の仮想ネットワーク基盤としての VPC のセキュリティ設計と接続オプションの優位性を解説します。 VPC ネットワーク設計とセキュリティグループ - AWS のネットワーク分離戦略 Amazon VPC を活用したネットワーク設計とセキュリティグループの構成方法を解説します。Azure VNet やオンプレミスのネットワーク設計と比較し、VPC のサブネット分離、セキュリティグループ、ネットワーク ACL の優位性を紹介します。