サービス検出
Amazon ECS サービスはオプションで Amazon ECS サービス検出を使用するように設定できます。サービス検出では、AWS Cloud MapAmazon ECS サービスの HTTP および DNS 名前空間を管理する API アクション。詳細については、AWS Cloud Map 開発者ガイドの「AWS Cloud Map とは」を参照してください。
サービス検出は以下の AWS リージョンで使用できます。
リージョン名 | リージョン |
---|---|
米国東部 (バージニア北部) |
us-east-1 |
米国東部 (オハイオ) |
us-east-2 |
米国西部 (北カリフォルニア) |
us-west-1 |
米国西部 (オレゴン) |
us-west-2 |
アフリカ (ケープタウン) |
af-south-1 |
アジアパシフィック (香港) |
ap-east-1 |
アジアパシフィック (ムンバイ) |
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 |
カナダ (中部) |
ca-central-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 |
中東 (バーレーン) |
me-south-1 |
南米 (サンパウロ) |
sa-east-1 |
AWS GovCloud (米国東部) |
us-gov-east-1 |
AWS GovCloud (米国西部) |
us-gov-west-1 |
サービス検出の概念
サービス検出は次のコンポーネントで構成されます。
-
サービス検出名前空間: 同じドメイン名 (example.com など) を共有するサービスの論理グループ
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
」および「list-namespaces
」を参照してください。 -
サービス検出サービス: サービス検出名前空間にあり、名前空間のサービス名および 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_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 ルーチングから削除され、異常とマークされます。
サービス検出に関する考慮事項
サービス検出を使用する際には、以下の点を考慮する必要があります。
-
プラットフォームバージョンが v1.1.0 以降を使用する場合、サービス検出は Fargate タスクでサポートされます。詳細については、「AWS Fargate プラットフォームのバージョン」を参照してください。
-
サービス検出を使用するように構成されたサービスには、サービスごとに 1,000 タスクに制限があります。これは、Route 53 サービスクォータによるものです。
-
Amazon ECS コンソールでのサービスの作成ワークフローでは、プライベート DNS 名前空間へのサービスの登録のみがサポートされます。AWS Cloud Map プライベート DNS 名前空間が作成されると、Route 53 プライベートホストゾーンが自動的に作成されます。
-
DNS 解決を成功させるには、VPC DNS 属性を設定する必要があります。属性の設定方法については、を参照してください。VPC の DNS サポートのAmazon VPC User Guide。
-
パブリック名前空間が使用されている場合でも、 サービス用に作成された DNS レコードは、パブリック IP アドレスではなく、タスクのプライベート IP アドレスに常に登録されます。
-
&service-discovery-first; では、
awsvpc
、bridge
、host
のいずれかのネットワークモードをタスクで指定する必要があります (none
はサポートされていません)。 -
サービスタスク定義が
awsvpc
ネットワークモードを使用する場合、各サービスタスクにA
または SRV レコードを自由に組み合わせて作成できます。SRV レコードを使用する場合、ポートが必要です。 -
サービスタスク定義が
bridge
またはhost
ネットワークモードを使用する場合、SRV レコードのみがサポートされる DNS レコードタイプです。各サービスタスクの SRV レコードを作成します。SRV レコードのコンテナ名とコンテナポートの組み合わせをタスク定義から指定する必要があります。 -
サービス検出サービスの DNS レコードは、VPC 内でクエリを実行できます。これは、次の形式を使用します:
<service discovery service name>.<service discovery namespace>
。 -
サービス名で DNS クエリを実行すると、
A
レコードはタスクに対応する 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」を参照してください。
-
-
を使用するときに作成される AWS Cloud Map リソースは、手動でクリーンアップする必要があります。
-
サービス検出を使用するサービスをデプロイするには、AWS CloudFormation または AWS Command Line Interface を使用する必要があります。
AWS CLI を使用してサービスを作成する方法については、「AWS Command Line Interface リファレンス」の「create-service」を参照してください。
AWS CloudFormation を使用してサービスを作成する方法については、「AWS CloudFormation ユーザーガイド」の「AWS::ECS::Service」を参照してください。
サービス検出の料金
Amazon ECS サービスディスカバリを使用しているお客様には、Route 53 リソースおよび AWS Cloud Map 検出 API オペレーションの料金が発生します。これには、Route 53 ホストゾーンの作成とサービスレジストリへのクエリのコストが含まれます。詳細については、AWS Cloud Mapデベロッパーガイドのの概念およびAWS Cloud Mapの料金を参照してください。
Amazon ECS は、コンテナレベルのヘルスチェックを実行し、この結果を AWS Cloud Map カスタムヘルスチェック API オペレーションに公開します。現在のところ、これは追加コストなしでお客様に提供されています。パブリックに公開されているタスクにネットワークヘルスチェックを設定する場合、このヘルスチェックに対しては課金されます。