Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

サービス検出

Amazon ECS サービスはオプションで Amazon ECS サービス検出 を使用するように設定できます。サービス検出 は AWS Cloud Map API アクションを使用して Amazon ECS サービスの HTTP および DNS 名前空間を管理します。詳細については、AWS Cloud Map 開発者ガイド の「AWS Cloud Map とは」を参照してください。

サービス検出 の概念

サービス検出 のコンポーネントは次のとおりです。

  • サービス検出 名前空間: 同じドメイン名 (example.com など) を共有する サービス検出 サービスの論理グループ。

  • サービス検出 サービス: サービス検出 名前空間にあり、名前空間のサービス名および DNS 設定から構成されます。これは、次の主要なコンポーネントを提供します。

    • サービスレジストリ: DNS あるいは AWS Cloud Map API アクションを介してサービスを検索し、サービスに接続するために使用できる 1 つ以上の利用可能なエンドポイントを返すことができます。

  • サービス検出 インスタンス: サービス検出 サービスにあり、サービスディレクトリ内の各 Amazon ECS サービスに関連付けられた属性で構成されます。

    • インスタンスの属性: 次のメタデータは、サービス検出 を使用するように設定された各 Amazon ECS サービスのカスタム属性として追加されます。

      • AWS_INSTANCE_IPV4A レコードの場合、インスタンスの詳細が検出されると、192.0.2.44 など、DNS クエリへの応答として Route 53 が返す IPv4 アドレスおよび AWS Cloud Map が返されます。

      • AWS_INSTANCE_PORT – サービス検出 サービスに関連付けられたポート値。

      • AVAILABILITY_ZONE – タスクが起動したアベイラビリティーゾーン。EC2 起動タイプを使用するタスクの場合、これはコンテナインスタンスが存在するアベイラビリティーゾーンです。Fargate 起動タイプを使用するタスクの場合、これは Elastic Network Interface が存在するアベイラビリティーゾーンです。

      • REGION – タスクが存在するリージョン。

      • ECS_SERVICE_NAME – タスクが属している Amazon ECS サービスの名前。

      • ECS_CLUSTER_NAME – タスクが属している Amazon ECS クラスターの名前。

      • EC2_INSTANCE_ID – タスクが配置されていたコンテナインスタンスの ID。タスクが Fargate 起動タイプを使用している場合、このカスタム属性は追加されません。

      • ECS_TASK_DEFINITION_FAMILY – タスクが使用しているタスク定義ファミリー。

  • Amazon ECS ヘルスチェック: Amazon ECS はコンテナレベルのヘルスチェックを定期的に実行します。エンドポイントがヘルスチェックに失敗した場合、このエンドポイントは DNS ルーチングから削除され、異常とマークされます。

サービス検出 に関する考慮事項

サービス検出 を使用する際には、以下の点を考慮する必要があります。

  • プラットフォームバージョンが v1.1.0 以降を使用する場合、サービス検出 は Fargate 起動タイプを使用してタスクでサポートされます。詳細については、「AWS Fargate プラットフォームのバージョン」を参照してください。

  • Amazon ECS コンソールでのサービスの作成ワークフローでは、プライベート DNS 名前空間へのサービスの登録のみがサポートされます。AWS Cloud Map プライベート DNS 名前空間が作成されると、Route 53 プライベートホストゾーンが自動的に作成されます。

  • Amazon ECS では、パブリック DNS 名前空間へのサービスの登録はサポートされていません。

  • サービス検出 では、awsvpcbridgehost のいずれかのネットワークモードをタスクで指定する必要があります (none はサポートされていません)。

  • サービスタスクで指定されたタスク定義が awsvpc ネットワークモードを使用する場合、各サービスタスクで A レコードまたは SRV レコードを組み合わせて作成できます。SRV レコードを使用する場合、ポートが必要です。

  • サービスタスクで指定されたタスク定義が bridge または host ネットワークモードを使用する場合、SRV のレコードのみがサポートされる DNS レコードタイプです。各サービスタスクの SRV レコードを作成します。SRV レコードのコンテナ名とコンテナポートの組み合わせをタスク定義から指定する必要があります。

  • サービス検出 サービスの DNS レコードは、VPC 内でクエリを実行できます。これは、次の形式を使用します: <サービス検出 service name>.<サービス検出 namespace>。詳細については、「ステップ 3: サービス検出 を確認する」を参照してください。

  • サービス名で DNS クエリを実行すると、A レコードはタスクに対応する IP アドレスのセットを返します。SRV レコードは、タスクごとに IP アドレスとポートのセットを返します。

  • サービス検出 はロードバランサーの背後にある ECS サービスに設定できますが、サービス検出 トラフィックは必ずタスクにルーティングされ、ロードバランサーにはルーティングされません。

  • Classic Load Balancer では、サービス検出 の使用はサポートされていません。

  • サービス検出 サービスの Amazon ECS により管理されるコンテナレベルのヘルスチェックを使用することをお勧めします。

    • HealthCheckCustomConfig—Amazon ECS はユーザーに代わってヘルスチェックを管理します。Amazon ECS ではコンテナおよびヘルスチェック、そしてタスク状態からの情報を使用して、AWS Cloud Map の正常性を更新します。これは、--health-check-custom-config パラメータを使用して サービス検出 サービスの作成時に指定します。詳細については、AWS Cloud Map API リファレンス の「HealthCheckCustomConfig」を参照してください。

  • Amazon ECS コンソールを使用している場合、ワークフローは ECS サービスごとに 1 つの サービス検出 サービスを作成します。すべてのタスク IP アドレスを A レコード、あるいはタスク IP アドレスとポートを SRV レコードとしてマッピングします。

  • サービス検出 は、最初にサービスを作成するときにのみ設定できます。サービス検出 を初めて構成するための既存のサービスの更新、または現在の構成の変更はサポートされていません。

  • サービス検出 を使用するときに作成される AWS Cloud Map リソースは、手動でクリーンアップする必要があります。詳細については、「チュートリアル: サービス検出 を使用したサービスの作成」トピックの「ステップ 4: クリーンアップ」を参照してください。

Amazon ECS コンソールの操作

Amazon ECS コンソールのサービス作成とサービス更新のワークフローは、サービス検出 をサポートしています。

サービス検出 を使用する新しい Amazon ECS サービスを作成するには、「サービスの作成」を参照してください。

サービス検出 料金表

Amazon ECS サービス検出 を使用しているお客様には、Route 53 リソースおよび AWS Cloud Map 検出 API オペレーションの料金が発生します。これには、Route 53 ホストゾーンの作成とサービスレジストリへのクエリのコストが含まれます。詳細については、AWS Cloud Map 開発者ガイド の「AWS Cloud Map Pricing」を参照してください。

Amazon ECS は、コンテナレベルのヘルスチェックを実行し、この結果を AWS Cloud Map カスタムヘルスチェック API オペレーションに公開します。現在のところ、これは追加コストなしでお客様に提供されています。パブリックに公開されているタスクにネットワークヘルスチェックを設定する場合、このヘルスチェックに対しては課金されます。