

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

# 可选：用 AWS CodeCommit 作 Puppet r10k 远程控制存储库
<a name="opspup-puppet-codecommit"></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 支持 团队联系。

您可以使用创建新存储库 AWS CodeCommit，并将其用作 r10k 远程控制存储库。要完成本节中的步骤并使用 CodeCommit 存储库，您需要具有**AWSCodeCommitReadOnly**托管策略所提供权限的用户。

**Topics**
+ [

## 步骤 1：用 CodeCommit 作 HTTPS 连接类型的存储库
](#codecommit-puppet-https)
+ [

## 步骤 2：（可选）用 CodeCommit 作 SSH 连接类型的存储库
](#codecommit-puppet-ssh)

## 步骤 1：用 CodeCommit 作 HTTPS 连接类型的存储库
<a name="codecommit-puppet-https"></a>



1. 在 CodeCommit 控制台中，创建一个新存储库。  
![\[在中创建新存储库 CodeCommit。\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/opspup_cc_remote.png)

1. 选择 **Skip** 以跳过设置 Amazon SNS 主题这一操作。

1. 在 **Code** 页面上，选择 **Connect to your repository**。

1. 在 **Connect to your repository** 页面上，选择 **HTTPS** 作为 **Connection type**，然后选择您的操作系统。  
![\[在中创建新存储库 CodeCommit。\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/opspup_cc_connect.png)

   在**克隆存储库的步骤**区域中，您的 `git clone` URL 应与以下内容类似：`https://git-codecommit.region.amazonaws.com/v1/repos/control-repo`。将此 URL 复制到方便位置以便在 Puppet 服务器设置中使用。

1. 关闭 “**连接到您的存储库**” 页面，然后返回 Puppet Enterprise 服务器设置。 OpsWorks 

1. 将您在步骤 4 中复制的 URL 粘贴到 Puppet Master 设置向导的 **Configure credentials** 页面中的 **r10k remote** 字符串框中。将 **r10k private key** 框保留为空。完成您的 Puppet Master 的创建和启动。

1. 在 IAM 控制台中，将**AWSCodeCommitReadOnly**策略附加到您的 Puppet 主服务器的实例配置文件角色。有关如何将策略附加到 IAM 角色的更多信息，请参阅 *IAM 用户指南* 中的[添加 IAM 身份权限（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)。

1. 按照用户*指南中使用 Git 凭据的 HTTPS AWS CodeCommit 用户*[设置](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html)中的步骤将现有`control-repo`内容推送到新 CodeCommit 存储库。

1. 现在，您可以按照 [使用初学者工具包配置 Puppet Master](opspup-starterkit.md)中的说明继续操作，并使用初学者工具包将代码部署到您的 Puppet Master。以下命令是一个示例。

   ```
   puppet-code deploy --all --wait --config-file .config/puppet-code.conf
   ```

## 步骤 2：（可选）用 CodeCommit 作 SSH 连接类型的存储库
<a name="codecommit-puppet-ssh"></a>

您可以将 AWS CodeCommit r10k 远程控制存储库配置为使用 SSH key pair 身份验证。在开始此过程之前，必须完成以下先决条件。
+ 您必须已使用前一节所述的 OpsWorks HTTPS 控制存储库启动了 for Puppet Enterprise 服务器。[步骤 1：用 CodeCommit 作 HTTPS 连接类型的存储库](#codecommit-puppet-https)必须先完成此操作，以便您能够将所需配置上传到 Puppet Master。
+ 请确保您的用户已附加**AWSCodeCommitReadOnly**托管策略。有关如何创建用户的更多信息，请参阅 [IAM 用户指南中的在您的 AWS 账户中创](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)*建 IAM 用户*。
+ 创建一个 SSH 密钥并将该密钥与 用户关联。按照*AWS CodeCommit 用户*指南`ssh-keygen`中的[步骤 3：在 Linux、macOS 或 Unix 上配置凭据](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-ssh-unixes.html#setting-up-ssh-unixes-keys)中的说明创建 public/private 密钥对。

1. 在会 AWS CLI 话中，运行以下命令将私钥文件内容上传到 P AWS Systems Manager arameter Store。你 OpsWorks 的 puppet Enterprise 服务器查询此参数以获取所需的证书文件。*private\$1key\$1file*替换为 SSH 私钥文件的路径。

   ```
   aws ssm put-parameter --name puppet_user_pk --type String --value "`cat private_key_file`"
   ```

1. 将 Systems Manager Parameter Store 权限添加到 Puppet Master。

   1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

   1. 在左侧导航窗格中，选择 **角色**。

   1. 选择 **aws-opsworks-cm-ec2 个角色**。

   1. 在 **Permissions**（权限）选项卡上，选择 **Attach policies**（附加策略）。

   1. 在 **Search (搜索)** 栏中，输入 **AmazonSSMManagedInstanceCore**。

   1. 在搜索结果中，选择 **Amazon SSMManaged InstanceCore**。

   1. 选择**附加策略**。

1. 创建配置文件清单。如果您使用的是初学者工具包中提供的 `control-repo-example` 存储库，请在示例存储库中显示的位置创建以下文件。否则，请根据您自己的控制存储库结构创建这些文件。将该*IAM\$1USER\$1SSH\$1KEY*值替换为您在此过程的先决条件中创建的 SSH 密钥 ID。

   ```
   control-repo-example/site/profile/manifests/codecommit.pp
   ```

   ```
   class profile::codecommit {
     $configfile = @(CONFIGFILE)
         Host git-codecommit.*.amazonaws.com
         User IAM_USER_SSH_KEY
         IdentityFile /etc/puppetlabs/puppetserver/ssh/codecommit.rsa
         StrictHostKeyChecking=no
         | CONFIGFILE
   
     # Replace REGION with the correct region for your server.
     $command = @(COMMAND)
         aws ssm get-parameters \
         --region REGION \
         --names puppet_user_pk \
         --query "Parameters[0].Value" \
         --output text >| /etc/puppetlabs/puppetserver/ssh/codecommit.rsa
         | COMMAND
   
     $dirs = [
               '/opt/puppetlabs/server/data/puppetserver/.ssh',
               '/etc/puppetlabs/puppetserver/ssh',
             ]
   
     file { $dirs:
       ensure => 'directory',
       group  => 'pe-puppet',
       owner  => 'pe-puppet',
       mode   => '0750',
     }
   
     file { 'ssh-config':
       path    => '/opt/puppetlabs/server/data/puppetserver/.ssh/config',
       require => File[$dirs],
       content => $configfile,
       group   => 'pe-puppet',
       owner   => 'pe-puppet',
       mode    => '0600',
     }
   
     exec { 'download-codecommit-certificate':
       command => $command,
       require => File[$dirs],
       creates => '/etc/puppetlabs/puppetserver/ssh/codecommit.rsa',
       path    => '/bin',
       cwd     => '/etc/puppetlabs',
     }
   
     file { 'private-key-permissions':
       subscribe => Exec['download-codecommit-certificate'],
       path      => '/etc/puppetlabs/puppetserver/ssh/codecommit.rsa',
       group     => 'pe-puppet',
       owner     => 'pe-puppet',
       mode      => '0600',
     }
   }
   ```

1. 将您的控制存储库推送到 CodeCommit。运行以下命令以将新的清单文件推送到您的存储库。

   ```
   git add ./site/profile/manifests/codecommit.pp
   git commit -m 'Configuring for SSH connection to CodeCommit'
   git push origin production
   ```

1. 部署清单文件。运行以下命令，将更新的配置部署到您 OpsWorks 的 Puppet Enterprise 服务器上。*STARTER\$1KIT\$1DIRECTORY*替换为 Puppet 配置文件的路径。

   ```
   cd STARTER_KIT_DIRECTORY
   
   puppet-access login --config-file .config/puppetlabs/client-tools/puppet-access.conf
   
   puppet-code deploy --all --wait \
   --config-file .config/puppet-code.conf \
   --token-file .config/puppetlabs/token
   ```

1. 更新 Pupp OpsWorks et Enterprise 服务器的分类。默认情况下，Puppet 代理每 30 分钟在节点（包括 Master）上运行一次。要避免等待，您可以手动在 Puppet Master 上运行代理。运行代理将选取新清单文件。

   1. 登录 Puppet Enterprise 控制台。

   1. 选择**分类**。

   1. 展开 **PE 基础设施**。

   1. 选择 **PE Master**。

   1. 在**配置**选项卡上，在**添加新类**中输入**profile::codecommit**。

      新类 `profile::codecommit` 可能不会在运行 `puppet-code deploy` 后立即出现。如果该类未出现，请在此页面上选择**刷新**。

   1. 选择**添加类**，然后选择**提交 1 更改**。

   1. 在 Puppet Enterprise 服务器上手动运行 Puppet 代理。 OpsWorks 选择**节点**，在列表中选择您的服务器，再选择**运行 Puppet**，然后选择**运行**。

1. 在 Puppet Enterprise 控制台中，更改存储库 URL 以使用 SSH 而不是 HTTPS。您在这些步骤中执行的配置将 OpsWorks 在 Puppet Enterprise 备份和还原过程中保存，因此在维护活动结束后，您无需手动更改存储库配置。

   1. 选择**分类**。

   1. 展开 **PE 基础设施**。

   1. 选择 **PE Master**。

   1. 在**配置**选项卡上，找到 `puppet_enterprise::profile::master` 类。

   1. 选择 `r10k_remote` 参数旁边的**编辑**。

   1. 将 HTTPS URL 替换为存储库的 SSH URL，然后选择**提交 1 更改**。

   1. 在 Puppet Enterprise 服务器上手动运行 Puppet 代理。 OpsWorks 选择**节点**，在列表中选择您的服务器，再选择**运行 Puppet**，然后选择**运行**。