

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

# 將外部執行個體註冊到 Amazon ECS 叢集
<a name="ecs-anywhere-registration"></a>

對於您向 Amazon ECS 叢集註冊的每個外部執行個體，它必須安裝 SSM Agent、Amazon ECS 容器代理程式和 Docker。若要將外部執行個體註冊到 Amazon ECS 叢集，必須先將其註冊為 AWS Systems Manager 受管執行個體。在 Amazon ECS 主控台上按幾下，可建立安裝指令碼。安裝指令碼包含 Systems Manager 啟用金鑰，以及安裝每個必要的代理程式和 Docker 的命令。必須在內部部署伺服器或虛擬機器上執行安裝指令碼，才能完成安裝和註冊步驟。

**注意**  
在向叢集註冊 Linux 外部執行個體之前，請先在外部執行個體上建立 `/etc/ecs/ecs.config` 檔案，並新增您想要的任何容器代理程式組態參數。將外部執行個體註冊到叢集之後，您無法執行此操作。如需詳細資訊，請參閱[Amazon ECS 容器代理程式組態](ecs-agent-config.md)。

------
#### [ AWS 管理主控台 ]

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

1. 從導覽列中選取要使用的「區域」。

1. 在導覽窗格中，選擇**叢集**。

1. 在 **Clusters** (叢集) 頁面上，選擇要向其註冊外部執行個體的叢集。

1. 在 **Cluster : {{name}}** (叢集：名稱) 頁面上，選擇 **Infrastructure** (基礎基礎設施) 索引標籤。

1. 在 **Register external instances** (註冊外部執行個體) 頁面上，完成下列步驟。

   1. 對於 **Activation key duration (in days)** (啟用金鑰持續時間 (以天為單位))，輸入啟用金鑰保持作用中的天數。在您輸入的天數到期之後，當註冊外部執行個體時，金鑰就不再有效。

   1. 對於 **Number of instances** (執行個體數目)，輸入要使用啟用金鑰向叢集註冊的外部執行個體數。

   1. 對於 **Instance role** (執行個體角色)，選擇要與外部執行個體建立關聯的 IAM 角色。如果尚未建立角色，請選擇 **Create new role** (建立新角色)，讓 Amazon ECS 代表您建立角色。如需外部執行個體需要哪些 IAM 許可的詳細資訊，請參閱 [Amazon ECS Anywhere IAM 角色](iam-role-ecsanywhere.md)。

   1.  複製註冊命令。應該在您要將其註冊到叢集的每個外部執行個體上執行此命令。
**重要**  
指令碼的 bash 部分必須以 root 身分執行。如果命令不是以 root 身分執行，則會傳回錯誤。

   1. 選擇**關閉**。

------
#### [ AWS CLI for Linux operating systems ]

1. 建立 Systems Manager 啟用對。這是用於 Systems Manager 受管執行個體啟用。輸出包含 `ActivationId` 和 `ActivationCode`。在後續步驟中會使用它們。請確定指定您已建立的 ECS Anywhere IAM 角色。如需詳細資訊，請參閱[Amazon ECS Anywhere IAM 角色](iam-role-ecsanywhere.md)。

   ```
   aws ssm create-activation --iam-role {{ecsAnywhereRole}} | tee ssm-activation.json
   ```

1. 在您的內部部署伺服器或虛擬機器 (VM) 上，下載安裝指令碼。

   ```
   curl --proto "https" -o "/tmp/ecs-anywhere-install.sh" "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install-latest.sh"
   ```

1. (選用) 在您的內部部署伺服器或虛擬機器 (VM) 上，使用指令碼簽章檔案透過以下步驟來驗證安裝指令碼。

   1. 下載並安裝 GnuPG。如需 GNUpg 的詳細資訊，請參閱 [GnuPG 網站](https://www.gnupg.org)。若您的系統為 Linux，請使用套件軟體管理工具在 Linux 上安裝 `gpg`。

   1. 擷取Amazon ECS PGP 公有金鑰。

      ```
      gpg --keyserver hkp://keys.gnupg.net:80 --recv BCE9D9A42D51784F
      ```

   1. 下載安裝指令碼簽章。簽章是 ASCII 分離的 PGP 簽章，存放於副檔名為 `.asc` 的檔案中。

      ```
      curl --proto "https" -o "/tmp/ecs-anywhere-install.sh.asc" "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install-latest.sh.asc"
      ```

   1. 使用金鑰驗證安裝指令碼檔案。

      ```
      gpg --verify /tmp/ecs-anywhere-install.sh.asc /tmp/ecs-anywhere-install.sh
      ```

      預期的輸出如下：

      ```
      gpg: Signature made Tue 25 May 2021 07:16:29 PM UTC
      gpg:                using RSA key 50DECCC4710E61AF
      gpg: Good signature from "Amazon ECS <ecs-security@amazon.com>" [unknown]
      gpg: WARNING: This key is not certified with a trusted signature!
      gpg:          There is no indication that the signature belongs to the owner.
      Primary key fingerprint: F34C 3DDA E729 26B0 79BE  AEC6 BCE9 D9A4 2D51 784F
           Subkey fingerprint: D64B B6F9 0CF3 77E9 B5FB  346F 50DE CCC4 710E 61AF
      ```

1. 在您的內部部署伺服器或虛擬機器 (VM) 上，執行安裝指令碼。在第一步中指定叢集名稱、區域和 Systems Manager 啟用 ID 和啟用代碼。

   ```
   sudo bash /tmp/ecs-anywhere-install.sh \
       --region {{$REGION}} \
       --cluster {{$CLUSTER_NAME}} \
       --activation-id {{$ACTIVATION_ID}} \
       --activation-code {{$ACTIVATION_CODE}}
   ```

   對於內部部署伺服器，或已為 GPU 工作負載安裝 NVIDIA 驅動程式的虛擬機器 (VM)，您必須將 `--enable-gpu` 旗標新增至安裝指令碼。指定此旗標時，安裝指令碼會驗證 NVIDIA 驅動程式是否正在執行，然後新增所需的組態變數來執行您的 Amazon ECS 任務。如需關於執行 GPU 工作負載和在任務定義中指定 GPU 要求的詳細資訊，請參閱 [在 Amazon ECS 任務定義中指定 GPU](ecs-gpu-specifying.md)。

   ```
   sudo bash /tmp/ecs-anywhere-install.sh \
       --region {{$REGION}} \
       --cluster {{$CLUSTER_NAME}} \
       --activation-id {{$ACTIVATION_ID}} \
       --activation-code {{$ACTIVATION_CODE}} \
       --enable-gpu
   ```

進行以下步驟向其他叢集註冊現有的外部執行個體

**若要向其他叢集註冊現有的外部執行個體**

1. 停用 Amazon ECS 容器代理程式。

   ```
   sudo systemctl stop ecs.service
   ```

1. 編輯 `/etc/ecs/ecs.config` 檔案，在 `ECS_CLUSTER` 行中，確保叢集名稱與要註冊外部執行個體的叢集名稱相符。

1. 移除現有的 Amazon ECS 代理程式資料。

   ```
   sudo rm /var/lib/ecs/data/agent.db
   ```

1. 啟動 Amazon ECS 容器代理程式。

   ```
   sudo systemctl start ecs.service
   ```

------
#### [ AWS CLI for Windows operating systems ]

1. 建立 Systems Manager 啟用對。這是用於 Systems Manager 受管執行個體啟用。輸出包含 `ActivationId` 和 `ActivationCode`。在後續步驟中會使用它們。請確定指定您已建立的 ECS Anywhere IAM 角色。如需詳細資訊，請參閱[Amazon ECS Anywhere IAM 角色](iam-role-ecsanywhere.md)。

   ```
   aws ssm create-activation --iam-role {{ecsAnywhereRole}} | tee ssm-activation.json
   ```

1. 在您的內部部署伺服器或虛擬機器 (VM) 上，下載安裝指令碼。

   ```
   Invoke-RestMethod -URI "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install.ps1" -OutFile “ecs-anywhere-install.ps1”
   ```

1. (選用) Powershell 指令碼由 Amazon 簽署，因此 Windows 會自動對該指令碼執行相同的憑證驗證。您不需要執行任何手動驗證。

   若要手動驗證憑證，請用右鍵按一下該檔案，導覽到屬性，然後使用 Digital Signatures (數位簽署) 索引標籤取得更多詳細資料。

   僅在主機在憑證存放區中具有憑證時，此選項才可用。

   驗證應會傳回類似以下內容的資訊：

   ```
   # Verification (PowerShell)
   Get-AuthenticodeSignature -FilePath .\ecs-anywhere-install.ps1
   
   SignerCertificate                         Status      Path
   -----------------                         ------      ----
   EXAMPLECERTIFICATE                        Valid       ecs-anywhere-install.ps1
   
   ...
   
   Subject              : CN="Amazon Web Services, Inc.",...
   
   ----
   ```

1. 在您的內部部署伺服器或虛擬機器 (VM) 上，執行安裝指令碼。在第一步中指定叢集名稱、區域和 Systems Manager 啟用 ID 和啟用代碼。

   ```
   .\ecs-anywhere-install.ps1 -Region {{$Region}} -Cluster {{$Cluster}} -ActivationID {{$ActivationID}} -ActivationCode {{$ActivationCode}}
   ```

1. 驗證 Amazon ECS 容器代理程式是否正在執行。

   ```
   Get-Service AmazonECS
   
   Status   Name               DisplayName
   ------   ----               -----------
   Running  AmazonECS          Amazon ECS
   ```

進行以下步驟向其他叢集註冊現有的外部執行個體

**若要向其他叢集註冊現有的外部執行個體**

1. 停用 Amazon ECS 容器代理程式。

   ```
   Stop-Service AmazonECS
   ```

1. 修改 `ECS_CLUSTER` 參數，以便叢集名稱與要註冊外部執行個體的叢集名稱相符。

   ```
   [Environment]::SetEnvironmentVariable("ECS_CLUSTER", $ECSCluster, [System.EnvironmentVariableTarget]::Machine)
   ```

1. 移除現有的 Amazon ECS 代理程式資料。

   ```
   Remove-Item -Recurse -Force $env:ProgramData\Amazon\ECS\data\*
   ```

1. 啟動 Amazon ECS 容器代理程式。

   ```
   Start-Service AmazonECS
   ```

------

在執行安裝指令碼以完成外部執行個體註冊程序之前， AWS CLI 可用來建立 Systems Manager 啟用。