View a markdown version of this page

將 Amazon ECS 服務連線至閘道 - Amazon Elastic Container Service

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

將 Amazon ECS 服務連線至閘道

您可以在建立或更新服務時設定閘道連接器,以將 Amazon ECS 服務連線至閘道。閘道連接器可識別接收流量的具名容器連接埠。您也可以設定運作狀態檢查,並指定服務可以使用的閘道存取類型。

Amazon ECS 會將服務連線至與其叢集相關聯的相容閘道。Amazon ECS 會為每個連線建立閘道路由,並提供唯一的 HTTPS 主機名稱。

先決條件

將閘道連接器新增至服務之前,請確定您有下列項目:

  • 閘道與您服務的 ECS 叢集相關聯,且關聯為 ACTIVE。如果沒有相關聯的閘道,Amazon ECS 會拒絕請求,因此您立即發現 ,而不是等待沒有 URL 部署的服務。

  • 您的服務具有使用awsvpc網路模式的任務定義,並在容器上定義應接收流量的具名連接埠。如需詳細資訊,請參閱 Amazon ECS 任務聯網選項。

  • 叢集上至少有一個閘道與您的 服務相容。當閘道與您服務的子網路位於相同的 VPC 中、符合您的存取類型篩選條件,並涵蓋您服務執行的每個可用區域時,閘道是相容的。

將服務連線至閘道

將閘道連接器新增至服務,並portName設定為任務定義中應接收流量的容器連接埠。

將服務連線至閘道

aws ecs update-service \ --cluster my-cluster \ --service my-service \ --gateway-connectors '[{"portName": "web"}]'

在部署期間,Amazon ECS 會選取相容的閘道、佈建或重複使用必要的輸入基礎設施、建立憑證、主機名稱、接聽程式規則和目標群組,以及為每個連線建立閘道路由。每個路由都有自己的 HTTPS 主機名稱。如果多個閘道相容,服務會連接到所有閘道。服務最多有一個閘道連接器。

自訂閘道連接器

portName 為必要項目。它是指任務定義中的具名連接埠。Amazon ECS 使用該連接埠的號碼、通訊協定和通訊協定版本來設定目標群組。如果名稱不符合服務使用之任務定義中的連接埠,則請求會失敗。運作狀態檢查設定和存取類型篩選條件是選用的。

存取類型篩選條件

會將服務連線的閘道filters.accessTypes縮小。將其設定為 PUBLIC、 PRIVATE或兩者,並省略以接受兩者。閘道可從網際網路PUBLIC存取。PRIVATE 閘道只能從可到達其內部負載平衡器的網路連接,因此不會到達來自網際網路的請求。篩選條件只會控制閘道選擇。它不會設定流量規則或安全規則。

僅連線到私有閘道

aws ecs update-service \ --cluster my-cluster \ --service my-service \ --gateway-connectors '[{ "portName": "web", "filters": { "accessTypes": ["PRIVATE"] } }]'

縮小篩選條件範圍會在其啟動的部署上生效。您的服務會捨棄與不再相符閘道的連線,且其 URLs會停止運作。

重要

絕不可從網際網路連線的服務必須在 上篩選PRIVATE。如果沒有篩選條件,稍後將面向網際網路的閘道與叢集建立關聯,則會在下一次部署時公開該服務。

運作狀態檢查

Amazon ECS 會針對為每個閘道路由建立的目標群組設定運作狀態檢查,並將流量僅轉送至傳遞的目標。根據預設,閘道會每 30 秒將 HTTP 請求傳送至連接埠/上的 portName ,並在 5 秒內收到200回應。在 200回應的服務/不需要運作狀態檢查組態。

如果 / 緩慢或實際工作,例如查詢資料庫或轉譯完整頁面,請設定不同的路徑。運作狀態檢查會針對每個目標重複每 30 秒運作一次,而慢速回應可能會超過運作狀態檢查逾時,並標示運作狀態不佳的目標。這類輕量型端點可/health避免兩者。

設定運作狀態檢查路徑

aws ecs update-service \ --cluster my-cluster \ --service my-service \ --gateway-connectors '[{ "portName": "web", "healthCheck": { "healthCheckPath": "/health" } }]'

如需了解每個設定控制項,請參閱《Application Load Balancer 使用者指南》中的 Application Load Balancer 目標群組的運作狀態檢查。

重要

運作狀態檢查變更會取代目標群組,因此您無法在使用ROLLING部署策略的服務上進行變更。該請求失敗,錯誤碼為 Target group properties cannot be changed with ROLLING deployment strategy。在 服務上使用 BLUE_GREEN或 CANARY 部署策略,或在第一次連接服務時設定運作狀態檢查組態。

Amazon ECS 如何選取相容的閘道

在服務部署期間,Amazon ECS 會評估與服務叢集相關聯的閘道,每個叢集最多 5 個,並縮小這些候選範圍。它會忽略不相符的閘道,而不是使部署失敗。

Amazon ECS 在三個維度上相符:

維度 Amazon ECS 如何判斷資格
存取類型 閘道符合閘道連接器的 filters.accessTypes。如果您省略篩選條件,則 PUBLIC和 PRIVATE閘道都符合資格。
VPC 閘道與您服務的子網路位於相同的 VPC 中。另一個 VPC 中的閘道不符合資格。
可用區域 閘道必須在服務所設定子網路所使用的每個可用區域中設定子網路。僅與部分可用區域重疊的閘道不符合資格。

Amazon ECS 會將服務連線至每個符合資格的閘道。如果另一個關聯的閘道符合資格,不相容的閘道本身不會失敗部署。如果沒有符合資格的閘道,請求會失敗,因為服務無法建立閘道連線。

可用區域涵蓋範圍必須完整,而非部分。閘道只會到達其具有子網路的可用區域。在可用區域中啟動的任務,閘道未涵蓋的任務永遠不會通過運作狀態檢查,而 Amazon ECS 會予以取代。完整可用區域涵蓋範圍可確保在任何服務的已設定可用區域中啟動的任務,可以向連線閘道後方運作狀態良好的目標註冊。

例如,請考慮兩個閘道:閘道 1 (GW1) 和閘道 2 (GW2),以及相同 VPC 中的服務 (S1):

資源 設定的可用區域 符合服務資格
GW1 us-west-2a, us-west-2b, us-west-2c 是。它涵蓋了服務的兩個可用區域。
GW2 us-west-2a, us-west-2b 否。它不涵蓋 us-west-2c。
S1 us-west-2b, us-west-2c

假設存取類型篩選條件也相符,Amazon ECS 只會將服務連線至閘道 1。閘道 1 同時涵蓋 us-west-2b和 us-west-2c,而閘道 2 不涵蓋 us-west-2c。將服務連接到閘道 2 可能會導致在 中啟動的任務us-west-2c失敗負載平衡器運作狀態檢查並予以取代。

重要

閘道連接器不會依名稱或 ARN 選取個別閘道。服務會連線至叢集上通過三個檢查的每個閘道。閘道跨越的可用區域超過您的服務需求,是更安全的組態。若要將服務連線至特定閘道,請將該閘道設定為涵蓋服務任務執行所在的每個可用區域。協調叢集與平台團隊的關聯變更,因為它們可能會影響多個 服務。

了解服務部署

使用閘道連接器建立或更新服務會開始部署。Amazon ECS 會在部署期間建立閘道路由及其服務特定的資源。閘道的第一個連線可能需要更長的時間,因為 Amazon ECS 可能需要先建立共用的 Application Load Balancer,才能建立服務的資源。稍後的服務會重複使用該負載平衡器、其接聽程式及其安全群組。

當您更新閘道連接器,或在叢集關聯變更後部署服務時,Amazon ECS 會重新評估哪些閘道符合資格。部署會建立新合格閘道的路由,並移除不再相符的連線。

測試流量如何達到新的修訂版

在漸進式部署期間,攜帶閘道測試流量標頭和值的請求會達到新的服務修訂,而其他所有請求則會繼續達到目前的服務修訂。平台團隊會在閘道上設定該標頭,而不是在您的服務上,因此閘道後方的每個服務都會使用相同的標頭。詢問他們這是什麼。

標頭的變更只會在下一次部署時到達您的服務,因此您的服務仍然可以符合先前的標頭。如需詳細資訊,請參閱設定測試流量規則。

驗證連線並尋找服務 URL

每個符合資格的閘道會產生個別的連線及其自己的 HTTPS 主機名稱。這些連線屬於服務修訂版,因此一個呼叫會在您命名的修訂版上傳回每個連線,以及每個連線的 URL、存取類型和狀態。在部署期間,存在多個修訂,每個修訂都有自己的連線。

您可以從服務的部署取得修訂 ARN。 會在 下describe-service-deployments傳回部署要移至的修訂 ARNtargetServiceRevision.arn。如需詳細資訊,請參閱檢視 Amazon ECS 服務修訂詳細資訊。

驗證連線並取得服務 URL

aws ecs describe-service-revisions \ --service-revision-arns arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1234567890123456789 \ --query 'serviceRevisions[0].ecsManagedResources.gatewayConnections'

每個連線都會攜帶 serviceUrl、要傳送流量的 HTTPS 主機名稱,以及 accessType,告訴您主機名稱達到的程度,以及 status。主機名稱的格式為 https://<unique-id>.ecs.<region>.on.aws。網域因 AWS 分割區而異。主機名稱的識別符是隨機的。它不是衍生自您的服務名稱,因此您以相同名稱刪除並重新建立的服務會取得不同的 URL。

status 讀取每個連線,並等到連線報告ACTIVE,再將用戶端流量導向其 URL。 會在 Amazon ECS 佈建 和ACTIVE該連線就緒CREATE_IN_PROGRESS時status報告,因此請再次執行 命令,直到您需要的連線報告 為止ACTIVE。連接到兩個閘道的服務有兩個要檢查的連線。回報的連線CREATE_FAILED表示佈建失敗,而不是仍在執行中,而且等待更久不會變更它。如需詳細資訊,請參閱服務主機名稱未回應。

閘道設定會出現在 中DescribeServiceRevisions,因為連接器會在部署之間變更,而修訂版會記錄部署時設定的內容。如需路由狀態、資源檢查,以及通過其路徑中每個資源的路徑,請參閱 監控閘道路由。

遷移服務

若要遷移已有自己的負載平衡器的服務,請在其中新增閘道連接器。Amazon ECS 會佈建閘道路由和新的主機名稱,而且不會移除或修改現有的負載平衡器組態。這兩個輸入路徑同時提供流量,因此您可以在稍後更新中移除自己的負載平衡器之前驗證閘道 URL。

若要將服務從一個閘道移至另一個閘道,請與您的平台團隊協調。由於連接器未指定閘道 ARN,遷移是透過叢集關聯和存取類型篩選條件來控制。這也是為什麼在閘道上固定的設定無法變更,例如其配置、子網路、接聽程式連接埠或通訊協定,而且建立替代閘道並將服務移至閘道是唯一取得不同值的方式。

  1. 建立目的地閘道並建立關聯。確認其存取類型和 VPC 符合服務,且其子網路涵蓋服務任務執行所在的每個可用區域。僅涵蓋其中一部分的閘道不符合資格,且服務不會連線到該閘道。

  2. 重新部署服務,使其連線至目的地閘道。如果原始閘道仍然符合資格,這兩個路由在轉換期間可以共存。

  3. 確認服務與目的地閘道的連線報告 ACTIVE,然後更新處理舊主機名稱的用戶端。

  4. 讓平台團隊在不再需要舊閘道時取消關聯。重新部署受影響的服務以移除舊路由。

重要

取消閘道的關聯會影響使用該叢集關聯的所有服務。與其他應用程式團隊規劃變更。移除其閘道路由後,舊產生的主機名稱會停止運作。

中斷服務與閘道的連線

中斷服務與所有閘道的連線

aws ecs update-service \ --cluster my-cluster \ --service my-service \ --gateway-connectors '[]'

若要僅保留特定閘道存取類型,請filters.accessTypes改為更新。在下一次部署期間,Amazon ECS 會移除不再相符之閘道的路由。您無法在保留相同存取類型的另一個合格閘道時,使用存取類型篩選條件來移除特定閘道。

當服務中斷連線時,Amazon ECS 會移除其閘道路由和服務特定的輸入資源。閘道及其叢集關聯仍可供其他服務使用。刪除連線的 Amazon ECS 服務也會移除其閘道連線。如果受管負載平衡器上沒有服務,Amazon ECS 會移除該負載平衡器。叢集關聯會保持 DISASSOCIATING 狀態,直到移除該叢集上的每個閘道路由,然後 Amazon ECS 會移除關聯。如需詳細資訊,請參閱取消閘道與叢集的關聯。

中斷連線會在啟動的部署上生效,因此服務會持續透過閘道提供流量,直到部署完成為止。

重要

在移除對應的路由之後,移除閘道連接器會使服務無法透過其閘道主機名稱存取。如果服務必須保持可存取狀態,請確定該服務具有另一個輸入路徑。