

# サービス検出を使用して Amazon ECS サービスを DNS 名で接続する
<a name="service-discovery"></a>

Amazon ECS サービスはオプションで Amazon ECS サービス検出を使用するように設定できます。サービス検出では、AWS Cloud MapAmazon ECS サービスの HTTP および DNS 名前空間を管理する API アクション。詳細については、『[AWS Cloud Map 開発者ガイド](https://docs.aws.amazon.com/cloud-map/latest/dg/Welcome.html)』の「*AWS Cloud Map とは*」を参照してください。

サービスの検出はリ以下のAWSージョンで使用できます。


| リージョン名 | リージョン | 
| --- | --- | 
|  米国東部 (バージニア北部)  |  us-east-1  | 
|  米国東部 (オハイオ)  |  us-east-2  | 
|  米国西部 (北カリフォルニア)  |  us-west-1  | 
|  米国西部 (オレゴン)  |  us-west-2  | 
|  アフリカ (ケープタウン)  |  af-south-1  | 
|  アジアパシフィック (香港)  |  ap-east-1  | 
|  アジアパシフィック (台北)  |  ap-east-2  | 
|  アジアパシフィック (ムンバイ)  |  ap-south-1  | 
|  アジアパシフィック (ハイデラバード)  |  ap-south-2  | 
|  アジアパシフィック (東京)  |  ap-northeast-1  | 
|  アジアパシフィック (ソウル)  |  ap-northeast-2  | 
|  アジアパシフィック (大阪)  |  ap-northeast-3  | 
|  アジアパシフィック (シンガポール)  |  ap-southeast-1  | 
|  アジアパシフィック (シドニー)  |  ap-southeast-2  | 
|  アジアパシフィック (ジャカルタ)  |  ap-southeast-3  | 
|  アジアパシフィック (メルボルン)  |  ap-southeast-4  | 
|  アジアパシフィック (マレーシア)  |  ap-southeast-5  | 
|  アジアパシフィック (ニュージーランド)  |  ap-southeast-6  | 
|  アジアパシフィック (タイ)  |  ap-southeast-7  | 
|  カナダ (中部)  |  ca-central-1  | 
|  カナダ西部 (カルガリー)  |  ca-west-1  | 
|  中国 (北京)  |  cn-north-1  | 
|  中国 (寧夏)  |  cn-northwest-1  | 
|  欧州 (フランクフルト)  |  eu-central-1  | 
|  欧州 (チューリッヒ)  |  eu-central-2  | 
|  欧州 (アイルランド)  |  eu-west-1  | 
|  欧州 (ロンドン)  |  eu-west-2  | 
|  欧州 (パリ)  |  eu-west-3  | 
|  欧州 (ミラノ)  |  eu-south-1  | 
|  欧州 (ストックホルム)  |  eu-north-1  | 
|  イスラエル (テルアビブ)  |  il-central-1  | 
|  欧州 (スペイン)  |  eu-south-2  | 
|  中東 (アラブ首長国連邦)  |  me-central-1  | 
|  メキシコ (中部)  |  mx-central-1  | 
|  中東 (バーレーン)  |  me-south-1  | 
|  南米 (サンパウロ）  |  sa-east-1  | 
|  AWS GovCloud (米国東部)  |  us-gov-east-1  | 
|  AWS GovCloud (米国西部)  |  us-gov-west-1  | 

## サービス検出の概念
<a name="service-discovery-concepts"></a>

サービス検出は次のコンポーネントで構成されます。
+ **サービス検出名前空間**: 同じドメイン名 (`example.com` など) を共有するサービス検出サービスの論理グループです。ここにトラフィックをルーティングします。`aws servicediscovery create-private-dns-namespace` コマンドを呼び出しまたは Amazon ECS のコンソールを使用して名前空間を作成できます。`aws servicediscovery list-namespaces` コマンドを使用して、現在のアカウントで作成された名前空間に関するサマリー情報を確認できます。サービス検出コマンドの詳細については、「AWS Cloud Map (サービス検出) AWS CLI Reference Guide」の「`[create-private-dns-namespace](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/create-private-dns-namespace.html)`」および「`[list-namespaces](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/list-namespaces.html)`」を参照してください。
+ **サービス検出サービス**: サービス検出名前空間にあり、名前空間のサービス名および DNS 設定から構成されます。これは、次の主要なコンポーネントを提供します。
  + **サービスレジストリ**: DNS あるいは AWS Cloud Map API アクションを介してサービスを検索し、サービスに接続するために使用できる 1 つ以上の利用可能なエンドポイントを返すことができます。
+ **サービスディスカバリインスタンス**: サービスディスカバリサービスにあり、サービスディレクトリ内の各 Amazon ECS サービスに関連付けられた属性で構成されます。
  + **インスタンスの属性**: 次のメタデータは、サービスディスカバリ を使用するように設定された各 Amazon ECS サービスのカスタム属性として追加されます。
    + **`AWS_INSTANCE_IPV4`** –`A` レコードの場合、インスタンスの詳細が検出されると、Route 53 など、DNS クエリへの応答として AWS Cloud Map が返す IPv4 アドレスおよび `192.0.2.44` が返されます。
    + **`AWS_INSTANCE_IPV6`** –`AAAA` レコードの場合は、インスタンスの詳細が検出されると、Route 53 など、DNS クエリへの応答として AWS Cloud Map が返す IPv6 アドレスおよび ` 2001:0db8:85a3:0000:0000:abcd:0001:2345` が返されます。`AWS_INSTANCE_IPv4` と `AWS_INSTANCE_IPv6` の両方が Amazon ECS デュアルスタックサービスに追加されます。Amazon ECS IPv6 専用サービスにのみ `AWS_INSTANCE_IPv6` が追加されます。
    + **`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`** タスクが使用しているタスク定義ファミリー。
    + **`ECS_TASK_SET_EXTERNAL_ID`** タスクセットが外部デプロイ用に作成され、サービス検出レジストリに関連付けられている場合、`ECS_TASK_SET_EXTERNAL_ID` 属性にはタスクセットの外部 ID が含まれます。
+ **Amazon ECS ヘルスチェック**: Amazon ECS はコンテナレベルのヘルスチェックを定期的に実行します。エンドポイントがヘルスチェックに失敗した場合、このエンドポイントは DNS ルーチングから削除され、異常とマークされます。

## サービスの検出に関する考慮事項
<a name="service-discovery-considerations"></a>

サービス検出を使用する際には、以下の点を考慮する必要があります。
+ プラットフォームバージョンが v1.1.0 以降を使用する場合、サービスの検出は Fargate タスクでサポートされます。詳細については、「[Amazon ECS 向け Fargate プラットフォームバージョン](platform-fargate.md)」を参照してください。
+ サービス検出を使用するように構成されたサービスには、サービスごとに 1,000 タスクに制限があります。これは、Route 53 サービスクォータによるものです。
+ Amazon ECS コンソールでのサービスの作成ワークフローでは、プライベート DNS 名前空間へのサービスの登録のみがサポートされます。AWS Cloud Map プライベート DNS 名前空間が作成されると、Route 53 プライベートホストゾーンが自動的に作成されます。
+ DNS 解決を成功させるには、VPC DNS 属性を設定する必要があります。属性の設定方法については、を参照してください。[VPC の DNS サポート](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support)の*Amazon VPC User Guide*。
+ Amazon ECS は、共有 AWS Cloud Map 名前空間へのサービスの登録をサポートしていません。
+ パブリック名前空間が使用されている場合でも、 サービス用に作成された DNS レコードは、パブリック IP アドレスではなく、タスクのプライベート IP アドレスに常に登録されます。
+ &service-discovery-first; では、`awsvpc`、`bridge`、`host` のいずれかのネットワークモードをタスクで指定する必要があります (`none` はサポートされていません)。
+ サービスタスク定義が `awsvpc` ネットワークモードを使用する場合、各サービスタスクに `A` または `SRV` のレコードを自由に組み合わせて作成できます。`SRV` レコードを使用する場合は、ポートが必要です。サービスがデュアルスタックサブネットを使用している場合は、さらに `AAAA` レコードを作成できます。サービスが IPv6 専用サブネットを使用している場合、`A` レコードを作成することはできません。
+ サービスタスク定義が `bridge` または `host` ネットワークモードを使用する場合、SRV レコードのみがサポートされる DNS レコードタイプです。各サービスタスクの SRV レコードを作成します。SRV レコードのコンテナ名とコンテナポートの組み合わせをタスク定義から指定する必要があります。
+ サービスの検出サービスの DNS レコードは、VPC 内でクエリを実行できます。これは、次の形式を使用します: `<service-discovery-service-name>.<service-discovery-namespace>`。
+ サービス名で DNS クエリを実行すると、`A` と `AAAA` のレコードはタスクに対応する IP アドレスのセットを返します。`SRV` は、各タスクの IP アドレスとポートのセットを返します。
+ 8 つ以下の正常なレコードがある場合、Route 53 はすべての DNS クエリに正常なすべてのレコードを返します。
+ すべてのレコードが異常である場合、Route 53 は DNS クエリに最大 8 つの異常なレコードを返します。
+ サービス検出はロードバランサーの背後にあるサービスに設定できますが、サービス検出トラフィックは必ずタスクにルーティングされ、ロードバランサーにはルーティングされません。
+ サービス検出は Classic Load Balancer の使用をサポートしていません。
+ Amazon ECS サービスのサービス検出により管理されるコンテナレベルのヘルスチェックを使用することをお勧めします。
  + **HealthCheckCustomConfig**—Amazon ECS; はユーザーに代わってヘルスチェックを管理します。Amazon ECS は、コンテナとヘルスチェックの情報、およびタスクの状態を使用して、ヘルスを AWS Cloud Map で更新します。これは、`--health-check-custom-config`パラメータを使用してサービス検出サービスの作成時に指定します。詳細については、*AWS Cloud MapAPI リファレンス*の「[HealthCheckCustomConfig](https://docs.aws.amazon.com/cloud-map/latest/api/API_HealthCheckCustomConfig.html)」を参照してください。
+ サービス検出を使用するときに作成される AWS Cloud Map リソースは、手動でクリーンアップする必要があります。
+ タスクとインスタンスはコンテナのヘルスチェックが値を返すまで `UNHEALTHY` として登録されます。ヘルスチェックが成功した場合、ステータスは `HEALTHY` に更新されます。コンテナのヘルスチェックに失敗すると、サービス検出インスタンスは登録解除されます。

## サービス検出の料金
<a name="service-discovery-pricing"></a>

Amazon ECS サービスディスカバリを使用しているお客様には、Route 53 リソースおよび AWS Cloud Map 検出 API オペレーションの料金が発生します。これには、Route 53 ホストゾーンの作成とサービスレジストリへのクエリのコストが含まれます。詳細については、*AWS Cloud Mapデベロッパーガイド*のの概念および[AWS Cloud Mapの料金](https://docs.aws.amazon.com/cloud-map/latest/dg/cloud-map-pricing.html)を参照してください。

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