

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

# 開始使用
<a name="migrating-to-systems-manager-getting-started"></a>

 遷移指令碼 是 Python 指令碼`stack_exporter.py`，您可以在本機或在 EC2 執行個體上執行。執行指令碼之前，請確定符合所有先決條件。如需先決條件的詳細資訊，請參閱 [先決條件](migrating-to-systems-manager-prerequisites.md)。

以下各節中的步驟說明如何將 OpsWorks 堆疊遷移至 Systems Manager Application Manager。

**Topics**
+ [步驟 1：準備您的環境以執行指令碼](w2ab1c14c43c17b9.md)
+ [步驟 2：下載遷移指令碼](migrating-to-systems-manager-download-script.md)
+ [步驟 3：設定您的環境以執行指令碼](migrating-to-systems-manager-script-parameters.md)
+ [步驟 4：執行指令碼](migrating-to-systems-manager-run-script.md)
+ [步驟 5：佈建 CloudFormation 堆疊](migrating-to-systems-manager-provision-stack.md)
+ [步驟 6：檢閱佈建的資源](migrating-to-systems-manager-provision-resources.md)
+ [步驟 7：啟動執行個體](migrating-to-systems-manager-start-instance.md)
+ [步驟 8：檢閱執行個體](migrating-to-systems-manager-review-instance.md)
+ [步驟 9：使用 Systems Manager Application Manager 在執行個體上監控和執行操作](migrating-to-systems-manager-monitor.md)

# 步驟 1：準備您的環境以執行指令碼
<a name="w2ab1c14c43c17b9"></a>

為您的作業系統執行適當的命令，以準備您的環境。

**Topics**
+ [Amazon Linux 2](#w2ab1c14c43c17b9b7)
+ [Amazon Linux](#w2ab1c14c43c17b9b9)
+ [Ubuntu 18.04、20.04、22.04](#w2ab1c14c43c17b9c11)
+ [Red Hat Enterprise Linux 8](#w2ab1c14c43c17b9c13)
+ [Windows Server 2019、Windows 10 Enterprise](#w2ab1c14c43c17b9c15)

## Amazon Linux 2
<a name="w2ab1c14c43c17b9b7"></a>

```
sudo su
python3 -m pip install pipenv
PATH="$PATH:/usr/local/bin"
yum update
yum install git
```

## Amazon Linux
<a name="w2ab1c14c43c17b9b9"></a>

```
sudo su
PATH="$PATH:/usr/local/bin"
export LC_ALL=en_US.utf-8
export LANG=en_US.utf-8
yum update
yum list | grep python3
yum install python36 // Any python version
yum install git
```

對於 Python 3.6 版，也執行：

```
python3 -m pip install pipenv==2022.4.8
```

對於 Python 3.7 版和更新版本，也請執行：

```
python3 -m pip install pipenv
```

## Ubuntu 18.04、20.04、22.04
<a name="w2ab1c14c43c17b9c11"></a>

```
sudo su
export PATH="${HOME}/.local/bin:$PATH"
apt-get update
apt install python3-pip
apt-get install git // if git is not installed
python3 -m pip install --user pipenv==2022.4.8
```

## Red Hat Enterprise Linux 8
<a name="w2ab1c14c43c17b9c13"></a>

```
sudo su
sudo dnf install python3 
PATH="$PATH:/usr/local/bin"
yum update
yum install git
python3 -m pip install pipenv==2022.4.8
```

## Windows Server 2019、Windows 10 Enterprise
<a name="w2ab1c14c43c17b9c15"></a>

**注意**  
對於 Windows Server 2019，請安裝 Python 3.6.1 版或更新版本。

```
pip install pipenv
```

如果尚未安裝 Git，請下載並安裝 [Git](https://git-scm.com/download/win)。

如果您使用 Git 做為技術指南來源，請在 Windows 上執行指令碼之前，將 Git 伺服器新增至 `known_hosts` 檔案。您可以使用 PowerShell 建立下列函數。

```
function add_to_known_hosts($server){
    $new_host=$(ssh-keyscan $server 2> $null)
    $existing_hosts=''
    if (!(test-path "$env:userprofile\.ssh")) {
        md "$env:userprofile\.ssh"
    }
    if ((test-path "$env:userprofile\.ssh\known_hosts")) {
        $existing_hosts=Get-Content "$env:userprofile\.ssh\known_hosts"
    }
    $host_added=0
    foreach ($line in $new_host) {
        if (!($existing_hosts -contains $line)) {
            Add-Content -Path "$env:userprofile\.ssh\known_hosts" -Value $line
            $host_added=1
    }
   }
   if ($host_added) {
       echo "$server has been added to known_hosts."
   } else {
       echo "$server already exists in known_hosts."
   }
}
```

然後，您可以在執行函數時提供 Git 伺服器 （例如 github.com、git-codecommit.*repository\$1region*.amazonaws.com)。

```
add_to_known_hosts "myGitServer"
```

# 步驟 2：下載遷移指令碼
<a name="migrating-to-systems-manager-download-script"></a>

執行下列命令，下載包含遷移指令碼和所有相關檔案的 zip 檔案。

```
aws s3api get-object \
    --bucket export-opsworks-stacks-bucket-prod-us-east-1 \
    --key export_opsworks_stacks_script.zip export_opsworks_stacks_script.zip
```

如果您使用的是 Linux，請使用下列命令安裝 unzip 公用程式。

```
sudo apt-get install unzip
sudo yum install unzip
```

使用適合您作業系統的命令解壓縮檔案。

**針對 Linux**，請使用下列命令。

```
unzip export_opsworks_stacks_script.zip
```

**對於 Windows**，請在 PowerShell 中使用 `Expand-Archive`命令。

```
Expand-Archive -LiteralPath PathToZipFile -DestinationPath PathToDestination
```

檔案解壓縮後，即可使用下列目錄和檔案。
+ README.md
+ LICENSE 
+ NOTICE
+ requirements.txt
+ 範本/
  + OpsWorksCFNTemplate.yaml
  +  MountEBSVolumes.yaml 
+ opsworks/
+ cloudformation/
+ instance\$1tab/
+ cfn\$1stack\$1deployer.py 
+ s3.py
+ stack\$1exporter\$1context.py
+ stack\$1exporter.py

# 步驟 3：設定您的環境以執行指令碼
<a name="migrating-to-systems-manager-script-parameters"></a>

使用下列命令將您的環境設定為執行指令碼。

```
pipenv install -r requirements.txt
pipenv shell
```

**注意**  
 目前，指令碼只能在 Application Manager 中佈建單層應用程式。例如，如果您在同一堆疊中為兩層執行指令碼兩次，則指令碼會在 Application Manager 中建立兩個不同的應用程式。

設定環境之後，請檢閱指令碼參數。您可以執行 `python3 stack_exporter.py --help`命令來檢視遷移指令碼的可用選項。


****  

| 參數 | Description | 必要 | Type | 預設值 | 
| --- | --- | --- | --- | --- | 
| --layer-id | 匯出此 OpsWorks layer ID 的 CloudFormation 範本。 | 是 | string |  | 
| --region | OpsWorks 堆疊 AWS 的區域。如果您的 OpsWorks 堆疊區域和 API 端點區域不同，請使用堆疊區域。這與 OpsWorks 堆疊的其他資源部分 （例如 EC2 執行個體和子網路） 相同。 | 否 | string | us-east-1 | 
| --provision-application | 根據預設，指令碼會佈建 CloudFormation 範本匯出的應用程式。將此參數傳遞至值為 FALSE 的指令碼，以略過 CloudFormation 範本的佈建。 | 否 | Boolean | TRUE | 
| --launch-template | 此參數定義是使用現有的啟動範本，還是建立新的啟動範本。您可以建立新的啟動範本，使用建議的執行個體屬性，或使用符合線上執行個體的執行個體屬性。 有效值包含： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opsworks/latest/userguide/migrating-to-systems-manager-script-parameters.html)  | 否 | string | RECOMMENDED | 
| --system-updates |  定義是否要在執行個體開機時執行核心和套件更新。 有效值包含： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opsworks/latest/userguide/migrating-to-systems-manager-script-parameters.html)  | 否 | string | ALL\$1UPDATES | 
| --http-username | Systems Manager SecureString 參數的名稱，存放用於向包含自訂技術指南的 HTTP 封存進行身分驗證的使用者名稱。 | 否 | string |  | 
| --http-password | Systems Manager SecureString 參數的名稱，存放用於向包含自訂技術指南的 HTTP 封存進行身分驗證的密碼。 | 否 | string |  | 
| --repo-private-key | Systems Manager SecureString 參數的名稱，存放用於向包含自訂技術指南的儲存庫進行身分驗證的 SSH 金鑰。如果儲存庫位於 GitHub，您必須產生新的 Ed25519 SSH 金鑰。如果您未產生新的 Ed25519 SSH 金鑰，則與 GitHub 儲存庫的連線會失敗。 | 否 | string |  | 
| --lb-type | 遷移現有負載平衡器時要建立的負載平衡器類型，如果有的話。 有效值包含： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opsworks/latest/userguide/migrating-to-systems-manager-script-parameters.html)  | 否 | string | ALB | 
| --lb-access-logs-path | 儲存負載平衡器存取日誌的現有 S3 儲存貯體和字首路徑。S3 儲存貯體和負載平衡器必須位於相同的區域。如果您未提供值，且--lb-type參數值設定為 None，則指令碼會建立新的 S3 儲存貯體和字首。請確定此字首有適當的儲存貯體政策。 | 否 | string |  | 
| --enable-instance-protection | 如果設定為 TRUE ，指令碼會為您的 Auto Scaling 群組建立自訂終止政策 (Lambda 函數）。具有protected\$1instance標籤的 EC2 執行個體受到縮減事件的保護。將protected\$1instance標籤新增至您要保護免於縮減事件的每個 EC2 執行個體。 | 否 | Boolean | FALSE | 
| --command-logs-bucket | 用來存放 AWS ApplyChefRecipe和 MountEBSVolumes日誌的現有 S3 儲存貯體名稱。如果您未提供值，指令碼會建立新的 S3 儲存貯體。 | 否 | string | aws-opsworks-application-manager-logs-account-id | 
| --custom-json-bucket | 儲存自訂 JSON 的現有 S3 儲存貯體名稱。如果您未提供值，指令碼會建立新的 S3 儲存貯體。 | 否 | string | aws-apply-chef-application-manager-transition-data-account-id | 

**備註**：
+ 如果您使用私有 GitHub 儲存庫，則必須為 SSH 建立新的`Ed25519`主機金鑰。這是因為 GitHub 變更了 SSH 中支援的金鑰，並移除了未加密的 Git 通訊協定。如需`Ed25519`主機金鑰的詳細資訊，請參閱 GitHub 部落格文章[改善 Git GitHub 通訊協定安全性](https://github.blog/2021-09-01-improving-git-protocol-security-github/)。產生新的`Ed25519`主機金鑰後，請為 SSH 金鑰建立 Systems Manager `SecureString` 參數，並使用 `SecureString` 參數名稱做為 `--repo-private-key` 參數的值。如需如何建立 Systems Manager `SecureString` 參數的詳細資訊，請參閱*AWS Systems Manager 《 使用者指南*》中的[建立 SecureString 參數 (AWS CLI)](https://docs.aws.amazon.com/systems-manager/latest/userguide/param-create-cli.html#param-create-cli-securestring) 或[建立 Systems Manager 參數 （主控台）](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html)。
+ `--http-username`、 `--http-password`和 `--repo-private-key` 參數是指 Systems Manager `SecureString` 參數的名稱。當您執行`AWS-ApplyChefRecipes`文件時，遷移指令碼會使用這些參數。
+ `--http-username` 參數要求您也指定 `--http-password` 參數的值。
+  `--http-password` 參數要求您也指定 `--http-username` 參數的值。
+ 請勿同時設定 `--http-password`和 的值`--repo-private-key`。提供 SSH 金鑰 (`--repo-private-key`) 的 Systems Manager `SecureString` 參數名稱，或儲存庫使用者名稱 (`--http-username`) 和密碼 ()`--http-password`。

# 步驟 4：執行指令碼
<a name="migrating-to-systems-manager-run-script"></a>

當您執行 時`python3 stack_exporter.py`，您可以佈建應用程式，或透過將 `--provision-application` 參數的值設定為 來建立入門範本`FALSE`。

**範例 1：佈建 Systems Manager Application Manager 應用程式**

下列命令會取得現有 OpsWorks layer 的相關資訊，並使用較新的 OpsWorks 架構佈建應用程式，進而達到類似於為堆疊設定的 Chef 版本的結果。指令碼會使用 CloudFormation 佈建所有必要的資源，例如 Auto Scaling 群組，然後在 Systems Manager Application Manager 中註冊應用程式。

將 *stack-region* 和 *layer-id* 取代為 OpsWorks 堆疊和 layer 的值。

```
python3 stack_exporter.py \
     --layer-id layer-id \
     --region stack-region
```

**範例 2：產生範本**

下列命令會取得現有 OpsWorks layer 的相關資訊，並產生 CloudFormation 範本。如果佈建範本，則 會達成類似於使用 Chef 14 的結果。在此範例中，不會佈建資源，因為 `--provision-application` 參數設定為 `FALSE`。

將 *stack-region* 和 *layer-id* 取代為 OpsWorks 堆疊和 layer 的值。

```
python3 stack_exporter.py \
    --layer-id layer-id \
    --region stack-region \
    --provision-application FALSE
```

執行 命令後，您可以在 Systems Manager 的 Application Manager 範本程式庫中檢閱範本，也可以佈建範本。如需檢視範本程式庫的詳細資訊，請參閱*AWS Systems Manager 《 使用者指南*》中的[使用範本程式庫](https://docs.aws.amazon.com/systems-manager/latest/userguide/application-manager-working-templates-overview.html#application-manager-working-stacks-template-library-working)。

# 步驟 5：佈建 CloudFormation 堆疊
<a name="migrating-to-systems-manager-provision-stack"></a>

**注意**  
只有在您將指令碼的 `--provision-application` 參數設定為 時，才需要完成此步驟`FALSE`。

當您以 的值指定 `--provision-application` 參數時`FALSE`，指令碼輸出會提供 CloudFormation 範本的名稱和 URL。此範本代表現有 OpsWorks 堆疊和 layer 的建議替換。

您可以使用 Application Manager 範本程式庫 （建議） 或使用 CloudFormation 來佈建範本。如需使用範本程式庫的詳細資訊，請參閱*AWS Systems Manager 《 使用者指南*》中的[使用範本程式庫](https://docs.aws.amazon.com/systems-manager/latest/userguide/application-manager-working-templates-overview.html#application-manager-working-stacks-template-library-working)。

# 步驟 6：檢閱佈建的資源
<a name="migrating-to-systems-manager-provision-resources"></a>

您現在可以檢閱佈建的資源。

1. 使用 CloudFormation 主控台檢閱佈建堆疊的資源。

   1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台，然後選擇 **Stacks**。

   1. 在**堆疊**頁面上，選擇堆疊，然後選擇**資源**索引標籤。

   1. 在**資源**索引標籤上，檢閱堆疊列出的資源。資源清單包含 EC2 Auto Scaling 群組，您可以在 Auto Scaling 主控台中檢閱，或 AWS CLI。

1. 使用 Systems Manager Application Manager 檢閱應用程式的資源。

   1.  在 https：//[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 開啟 Systems Manager 主控台。

   1. 在導覽窗格中，選擇 **Application Manager**。

   1.  在**應用程式**區段中，選擇自訂應用程式。Application Manager 會開啟**概觀**索引標籤。

   1.  選擇 **Resources** (資源) 標籤。**資源**索引標籤會顯示針對 OpsWorks 堆疊和 layer 遷移的所有資源。應用程式名稱包含 OpsWorks 堆疊的名稱，格式為 *app*-*stack-name*-*suffix*，其中*尾碼*代表堆疊 ID 的前六個字元。如需在 Application Manager 中檢視資源的詳細資訊，請參閱*AWS Systems Manager *[《 使用者指南》中的檢視應用程式資源](https://docs.aws.amazon.com/systems-manager/latest/userguide/application-manager-working-viewing-resources.html)。

# 步驟 7：啟動執行個體
<a name="migrating-to-systems-manager-start-instance"></a>

佈建執行個體之後，您就可以測試執行個體。此時，沒有執行個體正在執行。

若要讓執行個體上線，請將 Auto Scaling 群組的 `Min`、 `Max`和 `Desired capacity`值調整為對您的應用程式有意義的數字。一開始，您可能想要將這些值設定為 1，讓單一執行個體上線，並確認執行個體執行所有預期的動作，包括執行您的自訂 Chef 配方。

# 步驟 8：檢閱執行個體
<a name="migrating-to-systems-manager-review-instance"></a>

啟動執行個體之後，請驗證執行個體是否如預期般執行。

1.  檢閱位於指令碼`--command-logs-bucket`參數所指定 S3 儲存貯體中的 Chef `startup`和`terminate`日誌。根據預設，日誌會存放在名為 的儲存貯體中`aws-opsworks-application-manager-logs-account-id`。

   1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

   1.  選擇包含日誌的儲存貯體。

   1.  導覽至 `ApplyChefRecipes` 字首以檢視您的日誌。

1. 檢查 Application Load Balancer 連線和運作狀態。

   執行下列步驟來檢視負載平衡器的存取日誌。您可以使用指令碼的 `--lb-access-logs-path` 參數，指定要存放負載平衡器存取日誌的 S3 儲存貯體。

   1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

   1.  選擇您的 S3 儲存貯體，然後導覽至包含日誌的字首。

1.  驗證執行個體通過所有 Auto Scaling 和 Application Load Balancer 運作狀態檢查 （如果您已設定）。

   您可以在新的**執行個體**索引標籤上檢視 Auto Scaling 運作狀態的相關資訊。

   1.  在 https：//[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 開啟 Systems Manager 主控台。

   1. 在導覽窗格中，選擇 **Application Manager**。

   1.  在**應用程式**區段中，選擇**自訂應用程式**。

   1.  在清單中選擇應用程式。Application Manager 會開啟**概觀**索引標籤。

   1.  選擇**執行個體**索引標籤以檢視 Auto Scaling 運作狀態的相關資訊。

驗證 Chef 配方是否成功執行後，您可以減少 Auto Scaling 群組容量來終止執行個體。如果您有任何自訂終止配方，請確認配方如預期般運作。

# 步驟 9：使用 Systems Manager Application Manager 在執行個體上監控和執行操作
<a name="migrating-to-systems-manager-monitor"></a>

您現在可以使用 Application Manager 頁面上的新**執行個體**索引標籤來監控和執行執行個體上的操作。如需使用**執行個體**索引標籤的詳細資訊，請參閱*AWS Systems Manager 《 使用者指南*》中的[使用應用程式執行個體](https://docs.aws.amazon.com/systems-manager/latest/userguide/application-manager-working-instances.html)。

您可以使用**執行個體**索引標籤，在一個位置檢視多個 AWS 執行個體。使用此索引標籤，您可以檢視執行個體運作狀態和疑難排解問題的相關資訊。

![\[Application dashboard showing instance status with running, healthy, and OK indicators at 100%.\]](http://docs.aws.amazon.com/zh_tw/opsworks/latest/userguide/images/instances-tab.png)


執行下列步驟來檢視**執行個體**索引標籤。

1.  在 https：//[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 開啟 Systems Manager 主控台。

1. 在導覽窗格中，選擇 **Application Manager**。

1.  在**應用程式**區段中，選擇**自訂應用程式**。

1.  在清單中選擇應用程式。Application Manager 會開啟**概觀**索引標籤。

1.  選擇**執行個體**索引標籤，以檢視執行個體狀態和 EC2 運作狀態的相關資訊。