

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

# 具有共用 AWS Cloud Map 命名空間的 Amazon ECS Service Connect
<a name="service-connect-shared-namespaces"></a>

Amazon ECS Service Connect 支援在同一 AWS 帳戶 內跨多個 使用共用 AWS Cloud Map 命名空間 AWS 區域。此功能可讓您建立分散式應用程式，其中在不同的 中執行的服務 AWS 帳戶 可以透過 Service Connect 彼此探索和通訊。共用命名空間使用 AWS Resource Access Manager (AWS RAM) 進行管理，允許安全的跨帳戶資源共用。如需共用命名空間的詳細資訊，請參閱《 *AWS Cloud Map 開發人員指南*》中的[跨帳戶 AWS Cloud Map 命名空間共用](https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html)。

**重要**  
必須使用 `AWSRAMPermissionCloudMapECSFullPermission` 受管許可來共用命名空間，Service Connect 才能在命名空間正常運作。

當您搭配 Service Connect 使用共用 AWS Cloud Map 命名空間時，來自多個 的服務 AWS 帳戶 可以參與相同的服務命名空間。這對於具有多個 的組織特別有用 AWS 帳戶 ，這些組織需要維持跨帳戶邊界service-to-service通訊，同時保持安全和隔離。

**注意**  
若要與位於不同 VPC 中的服務通訊，您需要設定 VPC 間連線功能。這可以使用 VPC 對等互連來實現。如需詳細資訊，請參閱 *Amazon Virtual Private Cloud VPC Peering Guide* 中的 [Create or delete a VPC Peering connection](https://docs.aws.amazon.com/vpc/latest/peering/create-vpc-peering-connection.html)。

# 搭配 Amazon ECS Service Connect 使用共用 AWS Cloud Map 命名空間
<a name="service-connect-shared-namespaces-setup"></a>

設定 Service Connect 的共用 AWS Cloud Map 命名空間包含下列步驟：建立命名空間的命名空間擁有者、透過 AWS Resource Access Manager (AWS RAM) 共用的擁有者、接受資源共用的取用者，以及設定 Service Connect 使用共用命名空間的取用者。

## 步驟 1：建立 AWS Cloud Map 命名空間
<a name="service-connect-shared-namespaces-create"></a>

命名空間擁有者會建立將與其他 帳戶共用的 AWS Cloud Map 命名空間。

**使用 建立共用的命名空間 AWS 管理主控台**

1. 在 https：//[https://console.aws.amazon.com/cloudmap/](https://console.aws.amazon.com/cloudmap/) 開啟 AWS Cloud Map 主控台。

1. 選擇 **Create namespace (建立命名空間)**。

1. 輸入**命名空間名稱**。所有參與帳戶中的服務都會使用此名稱。

1. 在**命名空間類型**欄位中，根據使用案例選擇適當的類型：
   + **API 呼叫** – HTTP 命名空間，用於不使用 DNS 功能進行服務探索。
   + **VPC 中的 API 呼叫與 DNS 查詢** – 私有 DNS 命名空間，用於在 VPC 中使用私有 DNS 查詢進行服務探索。
   + **API 呼叫與公有 DNS 查詢** – 公有 DNS 命名空間，用於使用公有 DNS 查詢進行服務探索。

1.  選擇 **Create namespace (建立命名空間)**。

## 步驟 2：使用 共用命名空間 AWS RAM
<a name="service-connect-shared-namespaces-share"></a>

命名空間擁有者使用 與其他 AWS RAM 共用命名空間 AWS 帳戶。

**使用 AWS RAM 主控台共用命名空間**

1. 在 https：//[https://console.aws.amazon.com/ram/](https://console.aws.amazon.com/ram/) 開啟 AWS RAM 主控台。

1. 選擇 **Create resource share (建立資源共用)**。

1. 在**名稱**欄位中，輸入資源共用的描述性名稱。

1. 在**資源**區段中：

   1. 在**資源類型**欄位中，選擇 **Cloud Map 命名空間**。

   1. 選取您在前一步驟中建立的命名空間。

1. 在**受管許可**區段中，指定 **AWSRAMPermissionCloudMapECSFullPermission**。
**重要**  
必須使用 `AWSRAMPermissionCloudMapECSFullPermission` 受管許可來共用命名空間，Service Connect 才能在命名空間正常運作。

1. 在**主體**區段中，指定要與之共用命名空間的 AWS 帳戶 。您可以輸入帳戶 ID 或組織單位 ID。

1. 選擇 **Create resource share (建立資源共用)**。

## 步驟 3：接受資源共用
<a name="service-connect-shared-namespaces-accept"></a>

命名空間取用者帳戶必須接受資源共用邀請，才能使用共用命名空間。

**使用 AWS RAM 主控台接受資源共享邀請**

1. 在消費者帳戶中，開啟位於 https：//[https://console.aws.amazon.com/ram/](https://console.aws.amazon.com/ram/) 的 AWS RAM 主控台。

1. 在導覽窗格中，依次選擇**與我共用**、**資源共用**。

1. 選取資源共用邀請，然後選擇**接受資源共用**。

1. 接受後，請記下資源詳細資訊中的共用命名空間 ARN。設定 Service Connect 服務時，您將使用此 ARN。

## 步驟 4：使用共用命名空間設定 Amazon ECS 服務
<a name="service-connect-shared-namespaces-configure"></a>

接受共用命名空間後，命名空間取用者可以將 Amazon ECS 服務設定為使用共用命名空間。組態與使用一般命名空間類似，但您必須指定命名空間 ARN 而不是名稱。如需詳細的服務建立程序，請參閱[建立 Amazon ECS 滾動更新部署](create-service-console-v2.md)。

**使用 建立具有共用命名空間的服務 AWS 管理主控台**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在**叢集**頁面上，選擇要在其中建立服務的叢集。

1. 在**服務**下選擇**建立**。

1. 根據工作負載填入其他詳細資訊後，在 **Service Connect** 區段中，選擇**使用 Service Connect**。

1. 在**命名空間**欄位中，輸入共用命名空間的完整 ARN。

   ARN 格式為：`arn:aws:servicediscovery:region:account-id:namespace/namespace-id`

1. 視需要針對服務類型 (用戶端或用戶端-伺服器) 進行剩餘的 Service Connect 設定。

1. 完成服務建立程序。

您也可以使用 AWS CLI AWS SDKs設定服務，方法是在 的 `namespace` 參數中指定共用命名空間 ARN`serviceConnectConfiguration`。

```
aws ecs create-service \
    --cluster my-cluster \
    --service-name my-service \
    --task-definition my-task-def \
    --service-connect-configuration '{
        "enabled": true,
        "namespace": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcdef1234567890",
        "services": [{
            "portName": "web",
            "discoveryName": "my-service",
            "clientAliases": [{
                "port": 80,
                "dnsName": "my-service"
            }]
        }]
    }'
```

## 考量事項
<a name="service-connect-shared-namespaces-considerations"></a>

搭配 Service Connect 使用共用 AWS Cloud Map 命名空間時，請考慮下列事項：
+ AWS RAM 必須在 AWS 區域 您要使用共用命名空間的 中可用。
+ 共用命名空間必須與 AWS 區域 Amazon ECS 服務和叢集位於相同的 中。
+ 使用共用命名空間設定 Service Connect 時，必須使用命名空間 ARN，而不是 ID。
+ 支援所有命名空間類型：HTTP、私有 DNS 與公有 DNS 命名空間。
+ 如果撤銷共用命名空間的存取權，則需要與命名空間互動的 Amazon ECS 操作 (例如 `CreateService`、`UpdateService` 與 `ListServicesByNamespace`) 將會失敗。如需有關對共用命名空間許可問題進行疑難排解的詳細資訊，請參閱[使用共用 AWS Cloud Map 命名空間對 Amazon ECS Service Connect 進行故障診斷](service-connect-shared-namespaces-troubleshooting.md)。
+ 若在共用私有 DNS 命名空間中使用 DNS 查詢進行服務探索：
  + 命名空間擁有者需要呼叫 `create-vpc-association-authorization`，並指定與命名空間關聯的私有託管區域的 ID 以及取用者的 VPC。

    ```
    aws route53 create-vpc-association-authorization --hosted-zone-id Z1234567890ABC --vpc VPCRegion=us-east-1,VPCId=vpc-12345678
    ```
  + 命名空間取用者需要呼叫 `associate-vpc-with-hosted-zone`，並指定私有託管區域的 ID。

    ```
    aws route53 associate-vpc-with-hosted-zone --hosted-zone-id Z1234567890ABC --vpc VPCRegion=us-east-1,VPCId=vpc-12345678
    ```
+ 只有命名空間擁有者可以管理資源共用。
+ 命名空間取用者可以在共用命名空間內建立與管理服務，但無法修改命名空間本身。
+ 無論是哪個帳戶建立服務，探索名稱在共用命名空間內都必須是唯一的。
+ 共用命名空間中的服務可以探索和連線到其他可存取命名空間之 AWS 帳戶的 服務。
+ 為 Service Connect 啟用 TLS 並使用共用命名空間時， AWS 私有 CA 憑證認證機構 (CA) 的範圍僅限於該命名空間。撤銷共用命名空間的存取權時，CA 的存取權也會停止。
+ 使用共用命名空間時，命名空間擁有者和取用者預設無法存取跨帳戶 Amazon CloudWatch 指標。目標指標只會發佈至擁有用戶端服務的帳戶。擁有用戶端服務的帳戶無法存取擁有用戶端伺服器服務的帳戶接收的指標，反之亦然。若要允許跨帳戶存取指標，請設定 CloudWatch 跨帳戶可觀測性。如需設定跨帳戶可觀測性的詳細資訊，請參閱《Amazon [CloudWatch 使用者指南》中的 CloudWatch 跨帳戶可觀測性](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html)。 *Amazon CloudWatch * 如需 Service Connect CloudWatch 指標的詳細資訊，請參閱 [Amazon ECS CloudWatch 指標](available-metrics.md)。

# 使用共用 AWS Cloud Map 命名空間對 Amazon ECS Service Connect 進行故障診斷
<a name="service-connect-shared-namespaces-troubleshooting"></a>

使用以下資訊對共用 AWS Cloud Map 命名空間和 Service Connect 的問題進行故障診斷。如需有關尋找錯誤訊息的詳細資訊，請參閱 [Amazon ECS 疑難排解](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/troubleshooting.html)。

因缺少許可或撤銷命名空間存取權，会顯示與許可問題相關的錯誤訊息。

**重要**  
必須使用 `AWSRAMPermissionCloudMapECSFullPermission` 受管許可來共用命名空間，Service Connect 才能在命名空間正常運作。

錯誤訊息會以下列其中一種格式顯示：

An error occurred (ClientException) when calling the <OperationName> operation: User: arn:aws:iam::<account-id>:user/<user-name> is not authorized to perform: <ActionName> on resource: <ResourceArn> because no resource-based policy allows the <ActionName> action

下列案例可能會導致此格式的錯誤訊息：

**叢集建立或更新失敗**  
當 Amazon ECS 操作如 `CreateCluster`或 因缺少 AWS Cloud Map 許可而`UpdateCluster`失敗時，就會發生這些問題。這些操作需要下列 AWS Cloud Map 動作的許可：  
+ `servicediscovery:GetNamespace`
確保取用者帳戶已接受資源共用邀請，且在 Service Connect 組態中使用了正確的命名空間 ARN。

**服務建立或更新失敗**  
當 Amazon ECS 操作如 `CreateService`或 因缺少 AWS Cloud Map 許可而`UpdateService`失敗時，就會發生這些問題。這些操作需要下列 AWS Cloud Map 動作的許可：  
+ `servicediscovery:CreateService`
+ `servicediscovery:GetNamespace`
+ `servicediscovery:GetOperation` (用於建立新的 AWS Cloud Map 服務)
+ `servicediscovery:GetService` (用於 AWS Cloud Map 服務已存在時)
確保取用者帳戶已接受資源共用邀請，且在 Service Connect 組態中使用了正確的命名空間 ARN。

**`ListServicesByNamespace` 操作失敗**  
當 Amazon ECS `ListServicesByNamespace` 操作失敗時，會發生此問題。此操作需要下列 AWS Cloud Map 動作的許可：  
+ `servicediscovery:GetNamespace`
若要解決此問題：  
+ 確認取用者帳戶具有 `servicediscovery:GetNamespace` 許可。
+ 呼叫 API 時使用命名空間 ARN，而不是名稱。
+ 確保資源共用處於作用中狀態，且已接受邀請。

User: <iam-user> is not authorized to perform: <ActionName> on resource: <ResourceArn> with an explicit deny in an identity-based policy.

下列案例可能會導致此格式的錯誤訊息：

**服務刪除失敗並停滯在 `DRAINING` 狀態**  
當 Amazon ECS `DeleteService` 操作因撤銷命名空間存取權而缺少 `servicediscovery:DeleteService` 許可時，會發生此問題。服務最初可能看起來已成功刪除，但會停滯在 `DRAINING` 狀態。錯誤訊息會顯示為 Amazon ECS 服務事件。  
若要解決此問題，命名空間擁有者必須與取用者帳戶共用命名空間，才能完成服務刪除。

**服務中的任務執行失敗**  
當任務因缺少許可而啟動失敗時，會發生此問題。錯誤訊息會顯示為已停止的任務錯誤。如需詳細資訊，請參閱[解決 Amazon ECS 已停止任務錯誤](resolve-stopped-errors.md)。  
執行任務需要下列 AWS Cloud Map 動作：  
+ `servicediscovery:GetOperation`
+ `servicediscovery:RegisterInstance`
確保取用者帳戶具有所需許可，並且可以存取共用命名空間。

**任務無法完全停止或停滯在 `DEACTIVATING` 或 `DEPROVISIONING` 狀態**  
當任務在關閉期間因為缺少許可而無法從 AWS Cloud Map 服務取消註冊時，就會發生此問題。錯誤會在任務附件中顯示為 `statusReason`，可使用 `DescribeTasks` API 擷取附件。如需詳細資訊，請參閱 *Amazon Elastic Container Service API Reference* 中的 [DescribeTasks](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html)。  
停止任務需要下列 AWS Cloud Map 動作：  
+ `servicediscovery:DeregisterInstance`
+ `servicediscovery:GetOperation`
如果撤銷共用命名空間存取權，任務可能會保持 `DEACTIVATING` 或 `DEPROVISIONING` 狀態，直到命名空間存取權還原。需請求命名空間擁有者還原命名空間的存取權。