Amazon Web Services ブログ

AWS Cloud Map:アプリケーションのカスタムマップの簡単な作成と維持

アプリケーションをマイクロサービス(多数の別れたサービスがそれぞれ1つのジョブを実行する)として構成するお客様が増えています。マイクロサービスによりお客様は、多くの場合で反復的かつ、より素早いデプロイを可能になります。これらのマイクロサービスをベースとしたモダンなアプリケーションの多くは、様々な種類のクラウドリソースを利用して構成され、動的に変更されるインフラストラクチャ上にデプロイされます。これまでは、アプリケーションリソースの場所を管理するために設定ファイルを利用する必要がありました。しかし、マイクロサービスをベースとしたアプリケーションにおける依存関係は簡単に管理するには、複雑すぎる様になります。加えて、多数のアプリケーションは動的にスケールし、トラフィックにあわせて変更されるコンテナを利用して構成されていています。その様な構成はアプリケーションの応答性を向上させますが、新しい問題をもたらします。- 現在、アプリケーションのコンポーネントはその動作時にアップストリームサービスを検出し、接続する必要があります。この動的に変更されるインフラストラクチャーおよびマイクロサービスにおける接続性に関する問題は、共通してサービスディスカバリーによって解決されます。

AWS Cloud Mapのご紹介

AWS Cloud Mapは全てのアプリケーションコンポーネント、場所、属性、ヘルス状態を追跡します。アプリケーションはAWS SDKやAPI、またはDNSを使用してそれらの依存関係にある場所をAWS Cloud Mapに簡単に問い合わせる事が出来ます。これによりアプリケーションは動的にスケールし、アップストリームサービスに直接接続する事が可能になり、アプリケーションの応答性が向上します。

webサービスとクラウドのリソースをAWS Cloud Mapに登録する際、デプロイメントステージやバージョンの様なカスタム属性を利用して、それらを記述することが出来ます。アプリケーションは要求されるデプロイメントステージやバージョンを指定してディスカバリーコールを行う事ができます。AWS Cloud Mapはパラメータを満たすリソースの場所を返すでしょう。これはデプロイを簡素化し、アプリケーションの運用上の複雑性を軽減します。

AWS Cloud MAPに登録されているIPベースのリソースに対するヘルスチェックとの統合により、動作していないエンドポイントに対するトラフィックは自動的に停止されます。加えて、インフラストラクチャーに対する潜在的な問題について学ぶ為に、サービスのヘルス状態を記述するためのAPIがあります。これによりアプリケーションの弾力性が向上します。

AWS Cloud Mapの実行

AWS Cloud Mapの始め方は簡単です。 AWSコンソールまたはCLIを使って myapp.comの様なnamespaceを作成します。この例では、CLIを使っていきます。ではnamespaceを作成しましょう

aws servicediscovery create-public-dns-namespace --name myapp.com (http://myapp.com/)

現時点では、アプリケーションがAWS SDKまたはAPI呼び出しのみでリソースを検出するか、DNSを通じてオプショナルな検出が必要かどうかを決める必要があります。namespaceに対するDNS検出を有効にした際、登録する全てのリソースに対してipアドレスを提供する必要があります。ARNによるDynamoDBテーブルやAmazon API Gateway上にデプロイされたAPIのURLの様な他のクラウドリソースの登録を計画している場合は、APIディスカバリーモードを選択する必要があります。

namespaceを作成したら、serviceを作成する番です。serviceは usersauthpaymentの様な多数の動的に変更されるリソースで構成されるアプリケーションのコンポーネントを表します。serviceに対して分かりやすい名前を明示でき、DNSディスカバリーとヘルスチェックオプションを選択します。次の様にserviceを作成します。

aws servicediscovery create-service --name frontend --namespace-id %namespace_id%”

serviceを作成した後、カスタム属性とともにサービスインスタンスを登録します。

aws servicediscovery register-instance --service-id %service_id% --instance-id %id%
--attributes AWS_INSTANCE_IPV4=54.20.10.1,stage=beta,version=1.0,active=yes

aws servicediscovery register-instance --service-id %service_id% --instance-id %id%
--attributes AWS_INSTANCE_IPV4=54.20.10.2,stage=beta,version=2.0,active=no

 

これで、アプリケーションはサービスインスタンスを検出するAPIコールを行え、結果をフィルターするためのオプションなクエリパラメータを追加できます。

aws servicediscovery discover-instances --namespace-name myapp.com --service-name frontend --query-parameters version=1.0,active=yes
-->
{
"Instances": [
{
"InstanceId": "1",
"NamespaceName": "myapp.com",
"ServiceName": "users",
"HealthStatus": "HEALTHY",
"Attributes": {
"version":"1.0",
"active":"yes",
"stage":"beta",
"AWS_INSTANCE_IPV4": "54.20.10.2" }
}
]
}

これだけです! Amazon Elastic Container Service (ECS)AWS FargateはAWS Cloud Mapと強く統合されています。サービスを作成し、サービスディスカバリーを有効化すると、スケールアップ時に全てのタスクインスタンスは自動的にAWS Cloud Mapに登録され、スケールダウン時は登録解除されます。ECSは、常に最新のヘルス情報をAWS Cloud Mapに発行することで、健全なTaskインスタンスがディスカバリーコールで返る事を確実にします。

Amazon Elastic Container Service for Kubernetes (EKS)においては、EKS上で動くサービスのexternal IPをAWS Cloud Mapに自動的に発行します。これにより、オープンソースプロジェクトである ExternalDNSにおいて、Kubernetesのリソースを検出可能とするアップデートをリリースしています。Kubernetes External DNSに関するより詳細な内容はこちらを確認してください。

Now Generally Available

AWS Cloud Mapを利用してアプリケーションを構成し、ECSとEKSと統合、リッチでセキュアなAPIクエリインターフェイス、ユビキタスなDNS名解決や統合されたヘルスチェックのサポートを楽しむ事ができます。試したいですか?https://console.aws.amazon.com/cloudmap/homeにアクセスしてください。ECSとの統合をテストするには、https://console.aws.amazon.com/ecs/homeにアクセスし、サービスディスカバリーを有効にしてください。

Abby Fuller

Abby Fuller

developer relations | agony aunt at amazon web services. abby tweets @abbyfuller, or you can email her at abbyfull@amazon.com

この記事は SA 浅野が翻訳しました。原文はこちら