

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用服務探索以利用 DNS 名稱連接 Amazon ECS 服務
<a name="service-discovery"></a>

您可以選擇性地設定 Amazon ECS 服務，以使用 Amazon ECS 服務探索。服務探索使用 AWS Cloud Map API 動作來管理 Amazon ECS 服務的 HTTP 和 DNS 命名空間。如需詳細資訊，請參閱 *AWS Cloud Map Developer Guide* 中的 [What Is AWS Cloud Map](https://docs.aws.amazon.com/cloud-map/latest/dg/Welcome.html)。

服務探索可在下列 AWS 區域使用：


| 區域名稱 | 區域 | 
| --- | --- | 
|  美國東部 (維吉尼亞北部)  |  us-east-1  | 
|  美國東部 (俄亥俄)  |  us-east-2  | 
|  美國西部 (加州北部)  |  us-west-1  | 
|  美國西部 (奧勒岡)  |  us-west-2  | 
|  Africa (Cape Town)  |  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  | 
|  Europe (Stockholm)  |  eu-north-1  | 
|  以色列 (特拉維夫)  |  il-central-1  | 
|  歐洲 (西班牙)  |  eu-south-2  | 
|  中東 (阿拉伯聯合大公國)  |  me-central-1  | 
|  墨西哥 (中部)  |  mx-central-1  | 
|  Middle East (Bahrain)  |  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 參考指南*`[list-namespaces](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/list-namespaces.html)`》中的 `[create-private-dns-namespace](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/create-private-dns-namespace.html)`和 。
+ **服務探索服務**：存在於服務探索命名空間中，由命名空間的服務名稱和 DNS 設定組成。它提供以下核心元件：
  + **服務登錄**檔：可讓您透過 DNS 或 AWS Cloud Map API 動作查詢服務，並取得一或多個可用來連線至服務的可用端點。
+ **服務探索執行個體**：存在於服務探索服務內，由服務目錄中每個 Amazon ECS 服務相關聯的屬性組成。
  + **執行個體屬性**：針對每個設定為使用的服務探索的 Amazon ECS 服務，以下中繼資料會新增為自訂屬性：
    + **`AWS_INSTANCE_IPV4`** – 對於 `A`記錄，Route 53 傳回以回應 DNS 查詢的 IPv4 地址，並在探索執行個體詳細資訊時 AWS Cloud Map 傳回 ，例如 `192.0.2.44`。
    + **`AWS_INSTANCE_IPV6`**– 針對 `AAAA`記錄，Route 53 傳回以回應 DNS 查詢的 IPv6 地址，並在探索執行個體詳細資訊時 AWS Cloud Map 傳回 ，例如 ` 2001:0db8:85a3:0000:0000:abcd:0001:2345`。對於 Amazon ECS 雙堆疊服務，會同時新增 `AWS_INSTANCE_IPv4` 與 `AWS_INSTANCE_IPv6`。對於 Amazon ECS 純 IPv6 服務，僅會新增 `AWS_INSTANCE_IPv6`。
    + **`AWS_INSTANCE_PORT`**：與服務探索服務相關聯的連接埠值。
    + **`AVAILABILITY_ZONE`**：在其中啟動任務的可用區域。對於使用 EC2 的任務，這是容器執行個體所在的可用區域。對於使用 Fargate 的任務，這是彈性網路介面所在的可用區域。
    + **`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>

使用服務探索時應考慮以下事項：
+ 服務探索支援在 Fargate 上使用 1.1.0 或更新平台版本的任務。如需詳細資訊，請參閱[適用於 Amazon ECS 的 Fargate 平台版本](platform-fargate.md)。
+ 被設定為使用服務探索的服務有每個服務 1,000 項任務的限制。這是由於 Route 53 服務配額所致。
+ Amazon ECS 主控台的建立服務工作流程僅支援將服務註冊到私有 DNS 命名空間。建立 AWS Cloud Map 私有 DNS 命名空間時，會自動建立 Route 53 私有託管區域。
+ 必須設定 VPC DNS 屬性，以成功進行 DNS 解析。如需有關如何設定屬性的詳細資訊，請參閱 *Amazon VPC 使用者指南*中的 [VPC 中的 DNS 支援](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support)。
+ Amazon ECS 不支援在共用 AWS Cloud Map 命名空間中註冊服務。
+ 為服務探索服務建立的 DNS 記錄總是會使用任務的私有 IP 地址註冊，而非公有 IP 地址 (即使使用公有命名空間)。
+ 服務探索要求任務指定 `awsvpc`、`bridge` 或 `host` 網路模式 (不支援 `none`)。
+ 如果服務任務定義使用 `awsvpc` 網路模式，您可以為每項服務任務建立任意組合的 `A` 或 `SRV` 記錄。如果使用 `SRV` 記錄，必須具備連接埠。如果服務使用雙堆疊子網路，可以另外建立 `AAAA` 記錄。如果服務使用純 IPv6 子網路，則無法建立 `A` 記錄。
+ 如果服務任務定義使用 `bridge` 或 `host` 網路模式，則 SRV 記錄是唯一受支援的 DNS 記錄類型。為每個服務任務建立 SRV 記錄。SRV 紀錄必須從任務定義中指定容器名稱和容器連接埠組合。
+ 您可以在 VPC 內查詢服務探索服務的 DNS 記錄。其採用的格式為：`<service-discovery-service-name>.<service-discovery-namespace>`。
+ 針對服務名稱執行 DNS 查詢時，`A` 與 `AAAA` 記錄會傳回一組對應至任務的 IP 位址。`SRV` 記錄會為每項任務傳回一組 IP 位址與連接埠。
+ 如果您有八個以下正常運作的記錄，Route 53 會使用所有正常記錄回應所有 DNS 查詢。
+ 當所有記錄都狀況不良，Route 53 會使用最多八個狀況不良的記錄來回應 DNS 查詢。
+ 您可以為負載平衡器後方的服務設定服務探索，但會將服務探索流量一律路由到任務，而不是負載平衡器。
+ 服務探索不支援使用 Classic Load Balancer。
+ 針對您的服務探索服務，我們建議您使用由 Amazon ECS 管理的容器層級運作狀態檢查。
  + **HealthCheckCustomConfig**—Amazon ECS 代替您管理運作狀態檢查。Amazon ECS 利用來自容器和運作狀態檢查的資訊和您的任務狀態，透過 AWS Cloud Map更新運作狀態。當您建立服務探索服務時，會使用 `--health-check-custom-config` 參數來指定。如需詳細資訊，請參閱 *AWS Cloud Map API 參考*中的 [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 操作。這目前提供給客戶免費使用。如果您針對公開的任務設定其他網路運作狀態檢查，則會向您收取其費用。