

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 如何将 Puppe OpsWorks t Enterprise 服务器迁移到亚马逊弹性计算云（亚马逊 EC2）
<a name="opspup-migrate-ec2"></a>

**重要**  
该 AWS OpsWorks for Puppet Enterprise 服务于 2024 年 3 月 31 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

以下说明描述了如何将现有的 Puppet Enterprise 服务器迁移到亚马逊 EC2，以备您想继续使用 Puppet Enterprise 来满足外部的配置管理需求。 OpsWorks

**Topics**
+ [第 1 步：联系 Puppet 购买许可证](#opspup-migrate-ec2-contact)
+ [第 2 步：获取有关 Puppet Enterprise 服务器 OpsWorks 的详细信息](#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 步：删除 Puppe OpsWorks t Enterprise 服务器](#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 步：获取有关 Puppet Enterprise 服务器 OpsWorks 的详细信息
<a name="opspup-migrate-ec2-details"></a>

 查找并保存您的 for Puppet Enterprise 服务器 OpsWorks 的值。

1. 登录 AWS 管理控制台 并打开 Amazon S3 控制台，网址为[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

   复制你的 for Puppet Enterprise 服务器的现有 Amazon S3 存储桶 OpsWorks 的名称。存储桶名称的格式为 `aws-opsworks-cm-server-name-random-string`。

1. 运行**aws opsworks-cm describe-servers**命令以获取 Puppet Enterprise 服务器 OpsWorks 的配置。

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

   存储响应中的 `InstanceType`、`KeyPair`、`SubnetIds`、`SecurityGroupIds`、`InstanceProfileArn`、和 `Endpoint` 的值。

1. 使用 SSH 连接到现有 OpsWorks 的 Puppet Enterprise 服务器。您可以在 EC2 控制台中使用会话管理器而不是 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 步：获取有关 Puppet Enterprise 服务器 OpsWorks 的详细信息](#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>

[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)使用与 Pupp@@ [et Enterprise 服务器相同的配置， OpsWorks 从 EC2 控制台启动新 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html)。


| 参数名称 | 值 | 
| --- | --- | 
|  **OS**  |  Amazon Linux 2  | 
|  **实例类型**  |  [第 2 步：获取有关 Puppet Enterprise 服务器 OpsWorks 的详细信息](#opspup-migrate-ec2-details) 的步骤 2 中的 `InstanceType` 值。  | 
|  **密钥对名称**  |  [第 2 步：获取有关 Puppet Enterprise 服务器 OpsWorks 的详细信息](#opspup-migrate-ec2-details) 的步骤 2 中的 `KeyPair` 值。  | 
|  **VPC**  |  [第 2 步：获取有关 Puppet Enterprise 服务器 OpsWorks 的详细信息](#opspup-migrate-ec2-details) 的步骤 2 中`SubnetIds` 的 VPC。  | 
|  **子网**  |  [第 2 步：获取有关 Puppet Enterprise 服务器 OpsWorks 的详细信息](#opspup-migrate-ec2-details) 的步骤 2 中的 `SubnetIds`。  | 
|  **选择现有安全组** -> **常见安全组**   |  [第 2 步：获取有关 Puppet Enterprise 服务器 OpsWorks 的详细信息](#opspup-migrate-ec2-details) 的步骤 2 中的 `SecurityGroupIds`。  | 
|  **存储**  |  至少 120 GB。  | 
|  **IAM 实例配置文件**  |  [第 2 步：获取有关 Puppet Enterprise 服务器 OpsWorks 的详细信息](#opspup-migrate-ec2-details) 的步骤 2 中的 `InstanceProfileArn`。  | 

如果您想创建 Elastic IP 并将其附加到新实例，请复制新实例的实例 ID，然后完成 [（可选）步骤 4.1：创建并附加 Elastic IP](#opspup-migrate-ec2-elastic-ip) 中的步骤。

### （可选）步骤 4.1：创建并附加 Elastic IP
<a name="opspup-migrate-ec2-elastic-ip"></a>

使用弹性 IP 地址，您可以快速将地址重新映射到您的账户中的另一个实例，从而屏蔽实例故障。

**创建并关联弹性 IP 地址**

1. 登录 AWS 管理控制台 并打开亚马逊 EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/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 控制台中使用会话管理器而不是 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 of the instance*访问已恢复 EC2 实例的 Puppet 控制台。您可以在 EC2 控制台的实例详细信息页面上找到公 IPv4 有 DNS。登录凭据与您用于访问 Puppet Enterprise 服务器 OpsWorks 的凭据相同。

您可以保持 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>

Puppet Enterprise 服务器支持两种类型的域： OpsWorks 
+ BYODC（带上您自己的域名和证书）
+ OpsWorks endpoint

### 步骤 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)。Puppet **不支持** Puppet Forge 网站上的模块， OpsWorks除非在 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 控制台中使用会话管理器而不是 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 Agent。

**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
```

您可以保持 SSH 或 Session Manager 会话处于打开状态，以备步骤 8.2.2.3 使用。

##### 步骤 8.2.3.2：在 Puppet 控制台中接受证书
<a name="w2ab1b7c41c23b9c15b9"></a>

1. 在 `https://Public_IPv4_DNS` 前往 Puppet 服务器的控制台。

1. 选择**证书**，然后选择**未签名证书**。

1. 选择**接受**以签署 Puppet 代理的证书。

##### 步骤 8.2.3.3：将节点签入 Puppet Enterprise 服务器
<a name="w2ab1b7c41c23b9c15c11"></a>

在节点上运行以下命令以将其签入服务器。

```
puppet agent -t
```

现在，该节点应该在 Puppet 服务器的控制台中可见。

## 第 9 步：删除 Puppe OpsWorks t Enterprise 服务器
<a name="opspup-migrate-ec2-delete-server"></a>

您可以使用 OpsWorks 控制台或 AWS CLI 删除 For Puppet Enterprise 服务器。 OpsWorks 

**使用 OpsWorks 控制台删除服务器**

1. 登录 AWS 管理控制台 并打开 OpsWorks 控制台，网址为[https://console.aws.amazon.com/opsworks/](https://console.aws.amazon.com/opsworks/)。

1. 从导航窗格中，选择 **Puppet Enterprise 服务器**。

1. 在 **Puppet Enterprise 服务器**页面上，选择您要删除的服务器。

1. 从**操作**中，选择**删除 Puppet Enterprise 服务器**。

**要删除您的服务器，请使用 AWS CLI**

运行如下命令。

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