

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

# 建立和管理 Amazon ECS 閘道
<a name="gateway-managing"></a>

Amazon ECS Gateway 是帳戶層級的資源，擁有連線服務繼承的輸入組態和安全標準。平台團隊會建立閘道、設定聯網政策，並將其與目標 Amazon ECS 叢集建立關聯。應用程式團隊接著選擇加入其服務和服務，然後連線到叢集上的相容閘道。如需詳細資訊，請參閱[將 Amazon ECS 服務連線至閘道](gateway-connect-service.md)。

建立閘道不會立即佈建基礎設施。只有在第一個服務連線到相關聯的閘道時，Amazon ECS 才會佈建第一個 Application Load Balancer。

## 先決條件
<a name="gateway-managing-prerequisites"></a>

建立閘道之前，請確定您有下列項目：
+ Amazon ECS 可以擔任的基礎設施 IAM 角色，用於佈建和管理輸入資源。
+ 在您建立閘道的 AWS 區域中的預設 VPC。如果您沒有預設 VPC，您可以在建立閘道時指定自己的子網路。

### Amazon ECS Gateway 的基礎設施 IAM 角色
<a name="gateway-infrastructure-role"></a>

Amazon ECS 需要基礎設施角色，才能在帳戶中建立、設定和管理負載平衡器、接聽程式、目標群組、安全群組和 AWS Certificate Manager 憑證。

建立具有信任政策的 IAM 角色，允許`ecs.amazonaws.com`服務主體擔任該角色，並連接 AWS 受管政策 `AmazonECSInfrastructureRoleForGatewayHostSharedALB`。您可以在 [*AWS 受管政策參考*](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonECSInfrastructureRoleForGatewayHostSharedALB.html)中查看此政策授予的許可。

```
aws iam create-role \
    --role-name ecsInfrastructureRoleForGateways \
    --assume-role-policy-document '{
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "ecs.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }'

aws iam attach-role-policy \
    --role-name ecsInfrastructureRoleForGateways \
    --policy-arn arn:aws:iam::aws:policy/AmazonECSInfrastructureRoleForGatewayHostSharedALB
```

建立或更新閘道的 IAM 使用者或角色必須具有將基礎設施角色傳遞至 Amazon ECS 的許可。下列政策適用於`iam:PassRole`該特定基礎設施角色，而不是廣泛授予該角色。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::123456789012:role/ecsInfrastructureRoleForGateways"
        }
    ]
}
```

應用程式團隊既不需要`iam:PassRole`，也不需要閘道操作，即可為其服務提供 HTTPS 端點。團隊也不需要建立負載平衡器的許可，因為這些許可存在於基礎設施角色中。

**注意**  
IAM 角色最終一致，因此新建立的角色可能無法立即使用。在您建立這些角色之後，您的第一個`create-gateway`呼叫可能會失敗，並出現錯誤，例如`The infrastructureRoleArn could not be assumed. Verify the role exists and its trust policy allows ECS to assume it.`等待一小段時間 （約一分鐘） 讓角色傳播，然後重試 命令。

**重要**  
Amazon ECS 會標記其使用 建立的所有資源`AmazonECSManaged=true`。如果您從受管 Application Load Balancer、安全群組或接聽程式規則修改或移除此標籤，Amazon ECS 將無法再更新或清除該資源。

## 建立閘道
<a name="gateway-create"></a>

建立閘道時，您必須指定唯一的名稱、基礎設施角色 ARN 和`hostSharedAlb`組態物件。`hostSharedAlb` 閘道跨 服務共用 Application Load Balancer，並使用主機型路由將傳入流量導向連線的 ECS 服務。組態中的每個設定都是選用的，因此 會`--configuration '{"hostSharedAlb": {}}'`建立使用預設值的閘道。 `CreateGateway` 是同步操作：它會傳回 的狀態`ACTIVE`，而且 Amazon ECS 在第一個服務連線之前不會佈建基礎設施。

**建立閘道**

```
aws ecs create-gateway \
    --name my-gateway \
    --infrastructure-role-arn arn:aws:iam::123456789012:role/ecsInfrastructureRoleForGateways \
    --configuration '{
        "hostSharedAlb": {
            "scheme": "internet-facing",
            "networkConfiguration": {
                "subnets": ["subnet-abc123", "subnet-def456"]
            }
        }
    }'
```

輸出：

```
{
    "gatewayArn": "arn:aws:ecs:us-west-2:123456789012:gateway/my-gateway/a1b2c3d4",
    "name": "my-gateway",
    "status": "ACTIVE"
}
```

若要確認閘道並回讀其組態，請執行 `aws ecs describe-gateway --gateway my-gateway`。如需詳細資訊，請參閱[檢視閘道狀態](gateway-monitoring.md#gateway-view-status)。

### 自訂閘道
<a name="gateway-customize"></a>

Amazon ECS 會為您未提供的每個設定選取預設值。若要自訂閘道，請在組態內設定選用欄位。

在 Elastic Load Balancing 中具有同等設定的情況下，欄位名稱和值符合 Elastic Load Balancing API。

閘道接聽程式在連接埠 443 `HTTPS`上使用 。不支援其他通訊協定或連接埠。

建立閘道後，以下設定是不可變的。若要變更不可變的設定，您必須建立新的閘道、更新您的服務以連線到它，以及刪除先前的閘道。
+ **名稱。**名稱在您的帳戶中必須是唯一的，最多可達 255 個字元。
+ **子網路**。指定負載平衡器使用的子網路。預設是您預設 VPC 的子網路。閘道的子網路會決定涵蓋哪些 VPC 及其可用區域。服務只會連線到涵蓋其執行所在 VPC 和可用區域的閘道，因此您的選擇會決定哪些服務可以使用閘道。如果您的服務未在預設 VPC 中執行，請在建立閘道時設定子網路。
+ **IP 地址類型。**選擇 `ipv4`、`dualstack` 或 `dualstack-without-public-ipv4`。預設值為 `dualstack`。
+ **結構描述。**選擇 `internet-facing` 或 `internal`。預設值為 `internet-facing`。Amazon ECS 從結構描述衍生閘道的存取類型，因此 `internet-facing`提供 的存取類型`PUBLIC`，`internal`並提供 `PRIVATE`。服務只會連線到其接受其存取類型的閘道。如需詳細資訊，請參閱[將 Amazon ECS 服務連線至閘道](gateway-connect-service.md)。

您可以隨時變更下列設定。
+ **傳入安全群組。**如果您想要自行控制負載平衡器的傳入流量，請提供安全群組。否則，Amazon ECS 會建立一個 並管理其傳入規則。
+ **最大負載平衡器計數。**輸入閘道可管理的 Application Load Balancer 數量。預設為 10。
+ **AWS WAF Web ACL。**輸入 Web ACL 的 ARN，以與閘道管理的每個負載平衡器建立關聯。沒有預設值。
+ **HTTP 非同步緩解模式。**選擇 `monitor`、`defensive` 或 `strictest`。預設值為 `defensive`。
+ **存取日誌。**存取日誌預設為停用。若要啟用它們，請提供您擁有的 Amazon S3 儲存貯體。
+ **測試流量規則。**輸入 標頭，將測試流量路由到新的服務修訂。沒有預設值。變更適用於該服務下次部署上的每個服務。
+ **刪除保護。**刪除保護預設為啟用，閘道會將刪除保護傳播到其管理的負載平衡器。您必須先停用閘道，才能將其刪除。
+ **標籤傳播。**閘道會將其標籤套用至其管理的基礎設施。若要將標籤保留在閘道上，請將標籤傳播設定為 `NONE`。

## 將閘道與 Amazon ECS 叢集建立關聯
<a name="gateway-associate-cluster"></a>

只有在您將閘道與其叢集建立關聯之後，叢集的服務才能使用閘道。閘道及其服務的叢集必須位於相同的 AWS 區域和帳戶中。與閘道建立關聯不會自行路由任何流量。它不會變更現有服務接收流量的方式。此叢集中的服務會分別選擇加入，並在下次部署時開始使用閘道。

**將閘道與叢集建立關聯**

```
aws ecs associate-gateway-with-cluster \
    --gateway my-gateway \
    --cluster my-cluster
```

關聯是many-to-many。您可以將閘道與最多 10，000 個叢集建立關聯，並將叢集與最多 5 個閘道建立關聯。您只能透過 `AssociateGatewayWithCluster`和 管理關聯`DisassociateGatewayFromCluster`。

部署具有閘道連接器的服務時，Amazon ECS 會評估與其叢集相關聯的閘道。服務會根據其存取類型、VPC 和可用區域連線至相容的閘道。仔細規劃子網路涵蓋範圍，因為它決定了閘道的觸角。閘道僅提供其子網路涵蓋的 VPC 和可用區域中的服務。縮小涵蓋範圍會使叢集中的其餘服務無法使用。如需詳細資訊，請參閱[Amazon ECS 如何選取相容的閘道](gateway-connect-service.md#gateway-select-compatible)。

**注意**  
當您將閘道與叢集建立關聯時，現有的服務在下一次部署之前都不會受到影響。將另一個閘道新增至叢集並不會自動連接已在執行中的服務。

**列出閘道的叢集關聯**

```
aws ecs list-gateway-cluster-associations --gateway my-gateway
```

回應包含閘道 ARN、叢集 ARN 和關聯狀態。關聯可以有下列狀態：
+ `ACTIVE`：閘道與叢集相關聯
+ `DISASSOCIATING`：正在移除關聯。現有的閘道路由可以繼續提供流量，直到移除為止。

這些是關聯狀態，而不是閘道狀態。閘道有自己的一組狀態。您可以依閘道、叢集或狀態篩選此清單。傳遞 `--cluster` 以查看叢集擁有哪些閘道，或依狀態篩選以尋找仍為 的每個關聯`DISASSOCIATING`。這是您在刪除閘道之前檢查取消關聯是否擱置的方式。結果會分頁，預設為每頁 100 個。

## 更新閘道
<a name="gateway-update"></a>

更新閘道會變更每個連線服務繼承的設定，包括其後方的服務和基礎設施。某些設定無法在您建立閘道後變更。 會[自訂閘道](#gateway-customize)說明可用的設定，並識別您無法變更的設定。

**重要**  
`UpdateGateway` 會將閘道的組態取代為您請求中的組態。省略設定會將其清除，而不是保持不變。更新之前，請執行 `describe-gateway` 以擷取目前的組態，並包含您要保留在請求中的每個設定，而不只是您要變更的設定。

**步驟 1：取得目前的組態**

```
aws ecs describe-gateway --gateway my-gateway
```

```
{
    "gateway": {
        "gatewayArn": "arn:aws:ecs:us-west-2:123456789012:gateway/my-gateway/a1b2c3d4",
        "name": "my-gateway",
        "status": "ACTIVE",
        "accessType": "PUBLIC",
        "deletionProtection": true,
        "infrastructureRoleArn": "arn:aws:iam::123456789012:role/ecsInfrastructureRoleForGateways",
        "propagateTags": "GATEWAY",
        "configuration": {
            "hostSharedAlb": {
                "scheme": "internet-facing",
                "protocol": "HTTPS",
                "port": 443,
                "maxAlbCount": 10,
                "currentAlbCount": 2,
                "httpDesync": "monitor",
                "networkConfiguration": {
                    "subnets": ["subnet-abc123", "subnet-def456"],
                    "ipAddressType": "dualstack"
                }
            }
        },
        "tags": [],
        "createdAt": 1760000000.0,
        "updatedAt": 1760400000.0
    }
}
```

**步驟 2：選擇要包含的設定**

指定您要變更之設定的新值，並將其他設定包含其目前值。Amazon ECS 不會保留您離開的設定。下表顯示每個設定的執行位置，以及離開時會發生的情況。


| 設定 | 傳遞位置 | 如果您省略它 | 
| --- | --- | --- | 
| infrastructureRoleArn | 頂層 | 請求失敗 （必要） | 
| configuration.hostSharedAlb | 頂層 | 請求失敗 （必要） | 
| deletionProtection | 頂層 | 重設為 true | 
| propagateTags | 頂層 | 重設為 GATEWAY | 
| networkConfiguration.inboundSecurityGroup | hostSharedAlb | 已移除。Amazon ECS 會繼續管理傳入規則 | 
| webACLArn | hostSharedAlb | 已移除。Web ACL 已取消關聯 | 
| httpDesync | hostSharedAlb | 重設為 defensive | 
| accessLogs | hostSharedAlb | 已移除。存取記錄已關閉 | 
| testTrafficRules | hostSharedAlb | 已移除 | 
| maxAlbCount | hostSharedAlb | 重設為 10 | 

當您建立閘道時，閘道的 `name`、`scheme`、`subnets`、、 `protocol`和 `ipAddressType`是固定的`port`，無法變更。 `currentAlbCount` 是 Amazon ECS 報告的值，而不是設定。將所有這些項目從請求中移出。

**注意**  
每個`UpdateGateway`請求都需要基礎設施角色。未傳回驗證錯誤的請求。如果您省略刪除保護或標籤傳播，Amazon ECS 會將它們重設為預設值。

**步驟 3：更新閘道**

此範例`maxAlbCount`會從 變更為 `10` `25`。它還包含 `httpDesync`，不會變更。省略它會將閘道傳回預設值 `defensive`。

```
aws ecs update-gateway \
    --gateway my-gateway \
    --infrastructure-role-arn arn:aws:iam::123456789012:role/ecsInfrastructureRoleForGateways \
    --configuration '{
        "hostSharedAlb": {
            "maxAlbCount": 25,
            "httpDesync": "monitor"
        }
    }'
```

不可變設定說明 Amazon ECS 無法在不中斷流量的情況下重建的基礎設施。若要變更不可變設定，請建立具有所需組態的新閘道、將其與叢集建立關聯、將服務移至叢集，然後取消關聯並刪除舊閘道。

當您使用 修改可變參數時`UpdateGateway`，Amazon ECS 會將變更套用至由閘道非同步管理的所有負載平衡器。共用基礎設施的變更會在更新執行時生效。閘道會進入 `UPDATE_IN_PROGRESS`。Amazon ECS 會對所有作用中的 ALBs 執行滾動更新。更新完成時，狀態會變成 `UPDATE_COMPLETE`。

如果更新無法套用至一或多個負載平衡器 （例如無效的 WAF ARN 或缺少 IAM 許可），閘道狀態會變更為 `UPDATE_FAILED`。使用 `describe-gateway` 來檢查失敗。

**檢查更新進度**

```
aws ecs describe-gateway \
    --gateway my-gateway \
    --query 'gateway.{name:name,status:status}'
```

**注意**  
當閘道更新時，其負載平衡器會保留舊組態和新組態的混合，因為 Amazon ECS 已將變更套用至其中一些，但尚未套用至其他組態。重複 命令，直到狀態變更為止。

某些負載平衡器的更新可能會成功，而其他負載平衡器則會失敗。Amazon ECS 會盡最大努力更新每個資源，而不是在第一次失敗時停止。報告的閘道會`UPDATE_FAILED`說明 中的狀態`statusReason`。在 中`failures`，它會記錄無法更新的每個資源，以及原因。每個項目都會命名失敗的資源，以及與每次失敗相關聯的操作、錯誤代碼和訊息。閘道會記錄最多 200 個資源的失敗，每個資源最多 5 個錯誤。解決基礎問題，例如缺少 IAM 許可或外部修改的資源，然後重試`update-gateway`操作。

如需閘道的完整描述，包括其組態及其目前擁有的負載平衡器數量，請參閱 [檢視閘道狀態](gateway-monitoring.md#gateway-view-status)。

**重要**  
在更新報告 之前`UPDATE_COMPLETE`，請勿假設所有受管資源都有請求的組態。

下列各節說明您可以變更的設定。每個 只會顯示自己的組態。將其新增至您在步驟 1 中擷取的組態，並在請求中包含基礎設施角色。

### 控制傳入流量
<a name="gateway-control-inbound"></a>

根據預設，Amazon ECS 會為閘道負載平衡器建立安全群組，並允許來自連接埠 443 上所有 IP 地址的傳入 HTTPS 流量。若要自行控制傳入流量，請提供您自己的安全群組。Amazon ECS 會將指定的安全群組連接到負載平衡器、移除先前管理的現有傳入規則，並停止管理傳入規則。

**重要**  
在指定傳入安全群組之前，請確定它允許服務所需的流量。否則，連接到閘道的現有服務可能會變得無法連線。

**提供您自己的傳入安全群組**

```
"networkConfiguration": {
    "inboundSecurityGroup": "sg-085c0f8be53138a08"
}
```

負載平衡器是共用的，因此對傳入安全群組規則的變更可能會影響使用這些負載平衡器的每個服務。傳入安全群組是建立閘道後唯一可以變更的網路組態設定。子網路和 IP 地址類型無法變更。

### 關聯 AWS WAF Web ACL
<a name="gateway-associate-waf"></a>

Amazon ECS 會將 Web ACL 套用至閘道管理的每個負載平衡器。然後，Web ACL 會保護閘道後方的每個服務，而無需每個團隊進行設定。Web ACL 必須是 AWS 與閘道位於相同區域中的區域 Web ACL。

**建立 Web ACL 的關聯**

```
"webACLArn": "arn:aws:wafv2:us-west-2:123456789012:regional/webacl/my-waf/a1b2c3d4"
```

### 設定 HTTP 非同步緩解模式
<a name="gateway-desync"></a>

根據預設，負載平衡器使用 `defensive` 模式，可防止大多數請求走私，同時允許不符合 HTTP 的請求。使用 `strictest` 拒絕任何不合格的請求，或`monitor`允許所有請求並記錄哪些請求會遭到封鎖。

如果您正在考慮 `strictest`，請從 開始，`monitor`以便在拒絕任何內容之前，先查看會拒絕的內容。若要檢閱結果，請啟用存取日誌。

**設定非同步緩解模式**

```
"httpDesync": "strictest"
```

### 啟用存取日誌
<a name="gateway-access-logs"></a>

在您提供 Amazon S3 儲存貯體之前，都會停用存取日誌。Amazon ECS 不會為您建立儲存貯體，也沒有單獨的設定會開啟登入。提供儲存貯體可啟用存取日誌。

**啟用存取日誌**

```
"accessLogs": {
    "destination": {
        "s3": { "bucket": "my-gateway-logs", "prefix": "alb" }
    }
}
```

儲存貯體必須與閘道位於相同的 AWS 區域，且其儲存貯體政策必須允許 Elastic Load Balancing 寫入它。基礎設施角色不涉及這些寫入，因此授予 Amazon S3 許可沒有影響。由於負載平衡器是共用的，因此一個儲存貯體會接收閘道上每個服務的日誌。在每個日誌記錄中使用主機名稱來識別請求前往的服務。

### 設定測試流量規則
<a name="gateway-test-traffic-rules"></a>

在漸進式部署期間，新的服務修訂需要在生產流量轉移到流量之前接收流量。測試流量規則會識別達到新修訂的請求。

您可以在閘道上設定這些規則，而不是在個別服務上設定，因此閘道後方的每個服務都會使用相同的規則。Amazon ECS 會依標頭比對請求，而且您必須同時提供標頭名稱和至少一個值。

**設定測試流量規則**

```
"testTrafficRules": {
    "header": { "name": "x-test-traffic", "values": ["canary"] }
}
```

承載 的請求會在部署期間`x-test-traffic: canary`達到新的修訂版。所有其他請求都會到達生產修訂版。標頭比對是唯一的機制。您無法將一定百分比的流量傳送至新修訂版。

在部署之外，沒有新的修訂，因此帶有測試標頭的請求會像任何其他請求一樣達到生產修訂。

**重要**  
測試流量規則的變更不適用於執行中的服務。它適用於該服務下一個部署上的每個服務。

Amazon ECS 不會重寫現有規則的比對條件。變更 標頭會為新修訂建立新的規則。失敗的部署只會移除其建立的規則，並讓服務目前修訂的規則保持不變。因此，閘道可以擁有一些符合舊測試標頭的服務，以及其他符合新測試標頭的服務，直到每個服務重新部署為止。應用程式團隊必須重新部署其服務，才能挑選新的標頭。Amazon ECS 不會重新部署這些服務，因此請與服務擁有者協調標頭變更。

### 設定最大負載平衡器計數
<a name="gateway-alb-capacity"></a>

`maxAlbCount` 會限制閘道可以建立的 Application Load Balancer 數量。預設為 10。

**提高最大負載平衡器計數**

```
"maxAlbCount": 50
```

兩個不同的限制決定閘道可以提供多少服務。
+ **每個負載平衡器的服務。**`hostSharedAlb` 閘道會在一個 Application Load Balancer 上放置最多 25 個服務。這是 Application Load Balancer 的固定屬性，具有主機型路由，您無法變更它。
+ **每個閘道的負載平衡器。** `maxAlbCount`是您在閘道可以建立多少負載平衡器上設定的上限。預設為 10。

Amazon ECS 會將負載平衡器填入 25 個服務，然後佈建另一個，最多 `maxAlbCount`。當最後一個服務離開負載平衡器時，Amazon ECS 會將其移除。這兩個限制加在一起會將閘道限制為 25 x `maxAlbCount`服務，或預設為 250。

在您需要之前提高最大值。如果服務在每個負載平衡器已滿且閘道處於最大值時選擇加入，Amazon ECS 就無法為該服務佈建輸入。該失敗會在該服務的部署期間發生。之後提高最大值不會重試失敗的部署，因此服務擁有者必須再次部署服務。

若要查看閘道對其最大值有多少負載平衡器，請描述閘道並與 `currentAlbCount` 比較`maxAlbCount`。若要查看負載平衡器本身和每個閘道路由，請參閱 [檢查受管基礎設施 （平台檢視）](gateway-monitoring.md#gateway-inspect-infrastructure)。

## 取消閘道與叢集的關聯
<a name="gateway-disassociate-cluster"></a>

當您不再希望該叢集中的服務連線到閘道時，請取消閘道與叢集的關聯。取消關聯可防止透過該關聯進行新的服務連線。它不會立即移除現有的服務連線。

**重要**  
在取消閘道的關聯之前，如果受影響的服務必須保持可存取，請確認它們具有替代的輸入路徑。移除閘道路由會使服務無法透過該閘道連線。

**取消閘道與叢集的關聯**

```
aws ecs disassociate-gateway-from-cluster \
    --gateway my-gateway \
    --cluster my-cluster
```

關聯會進入 `DISASSOCIATING` 狀態。當關聯處於 `DISASSOCIATING` 狀態時：
+ 新服務無法透過叢集連線至閘道。
+ 現有服務會透過其閘道路由繼續接收流量。
+ 更新或重新部署服務時，會中斷與閘道的連線。
+ 關聯會持續存在，`DISASSOCIATING`直到移除所有閘道路由為止。

當閘道與其叢集取消關聯時，Amazon ECS 不會自動重新部署服務。應用程式團隊必須更新或重新部署其服務，以中斷與取消關聯的閘道的連線。如果叢集上沒有其他閘道，請在重新部署服務之前移除閘道連接器。移除最後一個閘道路由時，Amazon ECS 會移除關聯。

### 檢視防止取消關聯的閘道路由
<a name="gateway-view-blocking-routes"></a>

使用 `list-gateway-routes`命令來識別仍有與叢集相關聯的閘道路由的服務。

**尋找封鎖取消關聯的閘道路由**

```
aws ecs list-gateway-routes --gateway my-gateway --cluster my-cluster
```

回應會識別仍連線的閘道路由。如果路由仍然存在，請更新或重新部署受影響的服務，以中斷它們與取消關聯的閘道的連線。

除了閘道和叢集之外，您還可以依服務、容器連接埠名稱和狀態篩選路由。依狀態篩選會尋找停滯而不是仍在使用的路由。路由 ARN 會導致 `DescribeGatewayRoute`，它會報告該連線的主機名稱和服務特定基礎設施。如需詳細資訊，請參閱[監控閘道](gateway-monitoring.md)。

**注意**  
不允許僅依服務名稱篩選，因為服務名稱僅在叢集中是唯一的。將完整的服務 ARN 或服務名稱與其叢集一起傳遞。

### 取消閘道取消關聯
<a name="gateway-cancel-disassociation"></a>

當關聯處於 `DISASSOCIATING` 狀態時，您可以重新啟用它。再次建立閘道與相同叢集的關聯，Amazon ECS 會將關聯傳回 `ACTIVE`。

**重新啟用關聯**

```
aws ecs associate-gateway-with-cluster \
    --gateway my-gateway \
    --cluster my-cluster
```

服務保留的項目取決於其是否在取消關聯時重新部署。
+ **未重新部署的服務**會保留其現有的閘道路由和 DNS 主機名稱，並繼續為流量提供服務，而不會中斷。
+ **取消關聯時重新部署的服務會**遺失其閘道路由。每個部署都需要另一個部署才能再次接收路由，且該路由會攜帶新的 DNS 主機名稱。

取消關聯完成後，關聯會永久消失且無法重新啟用。如果原始關聯已完全移除，若要再次使用該叢集使用相同的閘道，請建立新的關聯。先前連線的服務會在下次部署時收到具有新 DNS 主機名稱的新閘道路由。

## 刪除閘道
<a name="gateway-delete"></a>

您可以刪除不再需要的閘道。刪除閘道之前，必須符合下列條件：
+ 刪除保護已停用。
+ 閘道沒有處於 `ACTIVE`或 `DISASSOCIATING` 狀態的叢集關聯。

**步驟 1：停用刪除保護**

刪除保護預設為啟用，因此請務必先將其停用再繼續。

```
aws ecs update-gateway --gateway my-gateway --no-deletion-protection
```

**步驟 2：取消閘道與其每個叢集的關聯**

為每個相關聯的叢集執行下列命令。

```
aws ecs disassociate-gateway-from-cluster \
    --gateway my-gateway \
    --cluster my-cluster
```

每個關聯都會保持在 中，`DISASSOCIATING`直到移除叢集中該閘道的每個閘道路由為止。只有在擁有路由的服務重新部署或刪除，而且不會為您重新部署服務時，Amazon ECS 才會移除路由。與服務擁有者協調以重新部署每個服務。

若要尋找保持關聯開啟的路由，請執行下列命令。

```
aws ecs list-gateway-routes --gateway my-gateway --cluster my-cluster
```

**步驟 3：確認沒有剩餘的關聯**

Amazon ECS 會在最後一個路由消失後移除關聯。當清單為空時，您可以刪除閘道。

```
aws ecs list-gateway-cluster-associations --gateway my-gateway
```

**步驟 4：刪除閘道**

```
aws ecs delete-gateway --gateway my-gateway
```

`DeleteGateway` 操作是同步的。當操作成功時，Amazon ECS 會傳回狀態為 的閘道資訊`DELETED`，而閘道的後續請求會傳回 `GatewayNotFoundException`。如果不符合先決條件，操作會失敗。

沒有任何項目需要清除。Amazon ECS 會在服務中斷連線時移除服務的閘道路由及其資源，並在其上次服務離開時移除負載平衡器。