

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

# 如何將 OpsWorks for Puppet Enterprise 伺服器遷移至 Amazon Elastic Compute Cloud (Amazon EC2)
<a name="opspup-migrate-ec2"></a>

**重要**  
 AWS OpsWorks for Puppet Enterprise 此服務已於 2024 年 3 月 31 日終止，並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問，請透過 [AWS re：Post](https://repost.aws/) 或透過 [AWS Premium Support](https://aws.amazon.com/support) 聯絡 AWS 支援 團隊。

以下指示說明如何將現有的 Puppet Enterprise 伺服器遷移至 Amazon EC2，以防您想要繼續使用 Puppet Enterprise 來滿足 OpsWorks 以外的組態管理需求。

**Topics**
+ [步驟 1：聯絡 Puppet 購買授權](#opspup-migrate-ec2-contact)
+ [步驟 2：取得 OpsWorks for Puppet Enterprise 伺服器的詳細資訊](#opspup-migrate-ec2-details)
+ [步驟 3：備份 OpsWorks for Puppet Enterprise 伺服器](#opspup-migrate-ec2-backup)
+ [步驟 4：啟動新的 EC2 執行個體](#opspup-migrate-ec2-launch)
+ [步驟 5：在新的 EC2 執行個體上安裝 Puppet Enterprise](#opspup-migrate-ec2-install-puppet)
+ [步驟 6：在新的 EC2 執行個體上還原備份](#opspup-migrate-ec2-restore)
+ [步驟 7：設定您的 Puppet 授權](#opspup-migrate-ec2-configure-license)
+ [步驟 8：遷移節點](#opspup-migrate-ec2-nodes)
+ [步驟 9：刪除適用於 Puppet Enterprise 的 OpsWorks 伺服器](#opspup-migrate-ec2-delete-server)

## 步驟 1：聯絡 Puppet 購買授權
<a name="opspup-migrate-ec2-contact"></a>

 當您將伺服器遷移至 EC2 時，新執行個體不會隨附 Puppet 授權。若要購買授權金鑰，請遵循 [Puppet 網站上](https://www.puppet.com/docs/pe/2021.1/purchasing_and_installing_a_license_key.html)的指示。

## 步驟 2：取得 OpsWorks for Puppet Enterprise 伺服器的詳細資訊
<a name="opspup-migrate-ec2-details"></a>

 尋找並儲存 OpsWorks for Puppet Enterprise 伺服器的值。

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

   複製 OpsWorks for Puppet Enterprise 伺服器的現有 Amazon S3 儲存貯體名稱。儲存貯體名稱的格式如下： `aws-opsworks-cm-server-name-random-string`

1. 執行 **aws opsworks-cm describe-servers**命令以取得 OpsWorks for Puppet Enterprise 伺服器的組態。

   ```
   aws opsworks-cm describe-servers \
      --server-name server-name \
      --region region
   ```

   儲存`Endpoint`回應中 `InstanceType`、`KeyPair`、`InstanceProfileArn`、、 `SubnetIds` `SecurityGroupIds`和 的值。

1. 使用 SSH 連線到現有的 OpsWorks for Puppet Enterprise 伺服器。您可以在 EC2 主控台中使用 Session Manager，而不是 SSH。

   執行下列命令。

   ```
   rpm -qa | grep opsworks-cm-puppet-enterprise | cut -d '-' -f 5
   ```

   回應提供 Puppet Enterprise 版本 （例如 2019.8.10)。儲存此值。

您將使用 SSH 或 Session Manager 進行下一個步驟。

## 步驟 3：備份 OpsWorks for Puppet Enterprise 伺服器
<a name="opspup-migrate-ec2-backup"></a>

1.  執行下列命令進行本機備份。

   ```
   mkdir /tmp/puppet-backup/
   sudo /opt/puppetlabs/bin/puppet-backup create --dir=/tmp/puppet-backup/
   ```

1.  執行下列命令來存放備份的名稱。

   ```
   ls /tmp/puppet-backup/
   PUPPET_BACKUP=$(ls /tmp/puppet-backup/)
   ```

1.  執行下列命令，將備份上傳至 S3 儲存貯體。將 *S3-Bucket*體取代為 中步驟 1 的值[步驟 2：取得 OpsWorks for Puppet Enterprise 伺服器的詳細資訊](#opspup-migrate-ec2-details)。

   ```
   aws s3 cp /tmp/puppet-backup/PUPPET_BACKUP s3://S3_Bucket/tmp/puppet-backup/
   ```

   存放 `PUPPET_BACKUP`和 `S3_BUCKET`值。您會將這些值匯入新的 EC2 執行個體。

您可以結束 SSH 或 Session Manager 工作階段。

## 步驟 4：啟動新的 EC2 執行個體
<a name="opspup-migrate-ec2-launch"></a>

使用與 OpsWorks for Puppet Enterprise 伺服器相同的組態，從位於 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)：// 的 EC2 主控台[啟動新的 EC2 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html)。


| 參數名稱 | Value | 
| --- | --- | 
|  **作業系統**  |  Amazon Linux 2  | 
|  **執行個體類型**  |  來自 的步驟 2 `InstanceType`的值[步驟 2：取得 OpsWorks for Puppet Enterprise 伺服器的詳細資訊](#opspup-migrate-ec2-details)。  | 
|  **金鑰對名稱**  |  來自 的步驟 2 `KeyPair`的值[步驟 2：取得 OpsWorks for Puppet Enterprise 伺服器的詳細資訊](#opspup-migrate-ec2-details)。  | 
|  **VPC**  |  `SubnetIds` 來自 的步驟 2 的 VPC[步驟 2：取得 OpsWorks for Puppet Enterprise 伺服器的詳細資訊](#opspup-migrate-ec2-details)。  | 
|  **子網路**  |  `SubnetIds` 來自 的步驟 2 的 [步驟 2：取得 OpsWorks for Puppet Enterprise 伺服器的詳細資訊](#opspup-migrate-ec2-details)。  | 
|  **選取現有的安全群組** -> **一般安全群組**   |  `SecurityGroupIds` 來自 的步驟 2 的 [步驟 2：取得 OpsWorks for Puppet Enterprise 伺服器的詳細資訊](#opspup-migrate-ec2-details)。  | 
|  **儲存**  |  至少 120 GB。  | 
|  **IAM 執行個體描述檔**  |  `InstanceProfileArn` 來自 的步驟 2 的 [步驟 2：取得 OpsWorks for Puppet Enterprise 伺服器的詳細資訊](#opspup-migrate-ec2-details)。  | 

如果您想要建立彈性 IP 並將其連接至新執行個體，請複製新執行個體的執行個體 ID，並完成 中的步驟[（選用） 步驟 4.1：建立並連接彈性 IP](#opspup-migrate-ec2-elastic-ip)。

### （選用） 步驟 4.1：建立並連接彈性 IP
<a name="opspup-migrate-ec2-elastic-ip"></a>

透過彈性 IP 位址，您可以快速地將地址重新映射至帳戶中的另一個執行個體，以遮罩執行個體或軟體的故障。

**建立和關聯彈性 IP 地址**

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

1. 選擇**彈性 IPs**。

1. 選擇 **Allocate Elastic IP address (配置彈性 IP 位址)**。

1. 在**配置彈性 IP 地址**頁面中，選擇**配置**。這會建立公有 IPv4 地址。

1. 複製**配置的 IPv4 地址**。

1. 在**動作**中，選擇**關聯彈性 IP 地址**。

1. 針對**執行個體**，輸入新執行個體的執行個體 ID。

1. 選擇**關聯**。

## 步驟 5：在新的 EC2 執行個體上安裝 Puppet Enterprise
<a name="opspup-migrate-ec2-install-puppet"></a>

使用 SSH 連線到新的 EC2 執行個體。您可以在 EC2 主控台中使用 Session Manager，而不是 SSH。

```
# switch to sudo user
sudo -i

# Setup environment variables
PUPPET_ENTERPRISE_VERSION=Puppet Enterprise version from step 2.3
hostname Public IPv4 DNS or Custom Domain if available

# Install Puppet Enterprise
curl -JLO https://pm.puppetlabs.com/puppet-enterprise/$PUPPET_ENTERPRISE_VERSION/puppet-enterprise-$PUPPET_ENTERPRISE_VERSION-el-7-x86_64.tar.gz
tar -xf puppet-enterprise-$PUPPET_ENTERPRISE_VERSION-el-7-x86_64.tar.gz

./puppet-enterprise-$PUPPET_ENTERPRISE_VERSION-el-7-x86_64/puppet-enterprise-installer
```

您可以在下一個步驟保持 SSH 或 Session Manager 工作階段開啟。

## 步驟 6：在新的 EC2 執行個體上還原備份
<a name="opspup-migrate-ec2-restore"></a>

```
# Setup environment variables
S3_BUCKET=S3 bucket name from step 2.1
PUPPET_BACKUP=Puppet backup file name from step 3.2

# download backup
aws s3 cp s3://$S3_BUCKET/tmp/puppet-backup/$PUPPET_BACKUP

# Prepare Puppet Enterprise backup to remove OpsWorks metadata
mkdir output
tar -xf $PUPPET_BACKUP -C output/
cd output/
rm -f opt/puppetlabs/facter/facts.d/opsworks.json
tar -cf ../$PUPPET_BACKUP *
cd ..
rm -rf output/

# Restore from backup
PATH=$PATH:/opt/puppetlabs/puppet/bin/
puppet-backup restore $PUPPET_BACKUP
puppet agent -t
```

您可以在執行個體的 https：//Public IPv4 存取已還原 EC2 執行個體的 Puppet 主控台。* IPv4 * 您可以在 EC2 主控台的執行個體詳細資訊頁面上找到公有 IPv4 DNS。登入登入資料與您用來存取 OpsWorks for Puppet Enterprise 伺服器的登入資料相同。

您可以在下一個步驟保持 SSH 或 Session Manager 工作階段開啟。

## 步驟 7：設定您的 Puppet 授權
<a name="opspup-migrate-ec2-configure-license"></a>

請遵循 [Puppet 網站上的](https://www.puppet.com/docs/pe/2021.1/purchasing_and_installing_a_license_key.html#install_a_license_key)步驟來設定您的授權。

您可以在下一個步驟保持 SSH 或 Session Manager 工作階段開啟。

## 步驟 8：遷移節點
<a name="opspup-migrate-ec2-nodes"></a>

OpsWorks for Puppet Enterprise 伺服器支援兩種類型的網域：
+ BYODC （攜帶您自己的網域和憑證）
+ OpsWorks 端點

### 步驟 8.1：針對 BYODC （使用您自己的網域和憑證）
<a name="opspup-migrate-ec2-nodes-byodc"></a>

對於這些節點，您只需要將 DNS 供應商中的自訂網域指向新 EC2 執行個體的公有 IPv4 DNS 或公有 IPv4 地址。

### 步驟 8.2：適用於 OpsWorks 端點
<a name="opspup-migrate-ec2-nodes-endpoint"></a>

對於 OpsWorks 端點，Puppet 文件建議[解除安裝](https://www.puppet.com/docs/pe/2019.8/uninstalling.html#uninstall_agents)節點上的 Puppet 代理程式，然後使用新還原的 Puppet Enterprise 伺服器[安裝](https://www.puppet.com/docs/pe/2019.8/installing_agents.html) Puppet 代理程式。

**注意**  
 雖然 Puppet 沒有移動代理程式節點的自動化程序，但 Puppet 社群成員在 [Puppet Forge 網站上](https://forge.puppet.com/)發佈了幾個模組，以完成自動節點遷移。這些模組包含[https://forge.puppet.com/modules/coreymbe/pe_migrate/readme](https://forge.puppet.com/modules/coreymbe/pe_migrate/readme)模組，以及由不同作者執行的第二個[遷移模組](https://forge.puppet.com/modules/ffalor/migrate)。除非在 Forge 模組中明確註明，否則 **Puppet 或 OpsWorks 不支援** Puppet Forge 網站上的模組。建議您謹慎使用這些模組，並在廣泛使用之前進行測試。

下列各節提供在 Linux 執行個體上解除安裝和重新安裝 Puppet 代理程式的步驟。

**Topics**
+ [步驟 8.2.1：從 Puppet 伺服器複製解除安裝程式](#opspup-migrate-ec2-uninstall-copy)
+ [步驟 8.2.2：下載解除安裝程式，並在節點上執行](#opspup-migrate-ec2-uninstall-download)
+ [步驟 8.2.3：在節點上重新安裝 Puppet 代理程式](#opspup-migrate-ec2-reinstall-agent)

#### 步驟 8.2.1：從 Puppet 伺服器複製解除安裝程式
<a name="opspup-migrate-ec2-uninstall-copy"></a>

解除安裝代理程式之前，請確定節點的 IAM 執行個體描述檔提供 S3 ReadOnly 許可。

執行下列命令，將解除安裝程式從 Puppet 伺服器複製到 S3 儲存貯體。

```
aws s3 cp \
   /opt/puppetlabs/bin/puppet-enterprise-uninstaller \
   s3://$S3_BUCKET/tmp/puppet-enterprise-uninstaller
```

執行 命令後，您可以登出 Puppet 伺服器的 SSH 或 Session Manager 工作階段。

#### 步驟 8.2.2：下載解除安裝程式，並在節點上執行
<a name="opspup-migrate-ec2-uninstall-download"></a>

使用 SSH 連線到節點。如果節點是 EC2 執行個體，您可以在 EC2 主控台中使用 Session Manager，而不是 SSH。

```
sudo -i

S3_BUCKET=aws-opsworks-cm-abcdefg-uuhtyn6messn
aws s3 cp s3://$S3_BUCKET/tmp/puppet-enterprise-uninstaller /opt/puppetlabs/bin/
chmod 700 /opt/puppetlabs/bin/puppet-enterprise-uninstaller
/opt/puppetlabs/bin/puppet-enterprise-uninstaller
```

您可以在下一個步驟保持 SSH 或 Session Manager 工作階段開啟。

#### 步驟 8.2.3：在節點上重新安裝 Puppet 代理程式
<a name="opspup-migrate-ec2-reinstall-agent"></a>

請完成下列步驟，以在節點上重新安裝 Puppet 代理程式。

**Topics**
+ [步驟 8.2.3.1：使用正確的組態安裝 Puppet 代理程式](#w2ab1b7c41c23b9c15b7)
+ [步驟 8.2.3.2：在 Puppet 主控台中接受憑證](#w2ab1b7c41c23b9c15b9)
+ [步驟 8.2.3.3：檢查 Puppet Enterprise 伺服器的節點](#w2ab1b7c41c23b9c15c11)

##### 步驟 8.2.3.1：使用正確的組態安裝 Puppet 代理程式
<a name="w2ab1b7c41c23b9c15b7"></a>

執行下列命令來安裝 Puppet 代理程式。

```
curl -k https://Public_IPv4_DNS:8140/packages/current/install.bash | bash
```

您可以在步驟 8.2.2.3 保持 SSH 或 Session Manager 工作階段開啟。

##### 步驟 8.2.3.2：在 Puppet 主控台中接受憑證
<a name="w2ab1b7c41c23b9c15b9"></a>

1. 前往位於 的 Puppet 伺服器主控台`https://Public_IPv4_DNS`。

1. 選擇**憑證**，然後選擇**未簽署憑證**。

1. 選擇**接受**以簽署 Puppet 代理程式的憑證。

##### 步驟 8.2.3.3：檢查 Puppet Enterprise 伺服器的節點
<a name="w2ab1b7c41c23b9c15c11"></a>

在節點上執行下列命令來檢查伺服器。

```
puppet agent -t
```

節點現在應該會顯示在 Puppet 伺服器的主控台中。

## 步驟 9：刪除適用於 Puppet Enterprise 的 OpsWorks 伺服器
<a name="opspup-migrate-ec2-delete-server"></a>

您可以使用 OpsWorks 主控台或刪除 AWS CLI OpsWorks for Puppet Enterprise 伺服器。

**使用 OpsWorks 主控台刪除伺服器**

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

1. 從導覽窗格中選擇 **Puppet Enterprise 伺服器**。

1. 在 **Puppet Enterprise 伺服器**頁面上，選擇您要刪除的伺服器。

1. 在**動作**中，選擇**刪除 Puppet Enterprise 伺服器**。

**使用 刪除您的伺服器 AWS CLI**

執行下列命令。

```
aws opsworks-cm delete-server \
   --server-name server-name \
   --region region
```