

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

# 選用： AWS CodeCommit 用作 Puppet r10k 遠端控制儲存庫
<a name="opspup-puppet-codecommit"></a>

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

1. 選擇**略過**以略過設定 Amazon SNS 主題。

1. 在 **Code (程式碼)** 頁面上，選擇 **Connect to your repository (連線至您的儲存庫)**。

1. 在 **Connect to your repository (連線至您的儲存庫)** 頁面上，選擇 **HTTPS** 做為 **Connection type (連線類型)**，然後選擇您的作業系統。  
![\[在 CodeCommit 中建立新的儲存庫。\]](http://docs.aws.amazon.com/zh_tw/opsworks/latest/userguide/images/opspup_cc_connect.png)

   在 **Steps to clone your repository (複製您儲存庫的步驟)** 區域中，您的 `git clone` URL 應類似如下：`https://git-codecommit.region.amazonaws.com/v1/repos/control-repo`。將此 URL 複製到方便用於 Puppet 伺服器設定的位置。

1. 關閉**連線至您的儲存庫**頁面，並返回 OpsWorks for Puppet Enterprise 伺服器設定。

1. 在 Puppet 主設定精靈**的設定登入**資料頁面的 **r10k 遠端**字串方塊中，貼上您在步驟 4 中複製的 URL。將 **r10k private key (r10k 私有金鑰)** 方塊保留空白。完成建立並啟動您的 Puppet 主伺服器。

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. 請遵循*AWS CodeCommit 《 使用者指南*》中的[使用 Git 登入資料設定 HTTPS 使用者](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html)的步驟，將現有`control-repo`內容推送至新的 CodeCommit 儲存庫。

1. 現在，您可以遵循[使用入門套件設定 Puppet 主伺服器](opspup-starterkit.md)中的說明繼續進行，並使用入門套件將程式碼部署至您的 Puppet 主伺服器。下列是範例命令。

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

## 步驟 2：（選用） 使用 CodeCommit 做為具有 SSH 連線類型的儲存庫
<a name="codecommit-puppet-ssh"></a>

您可以設定 AWS CodeCommit r10k 遠端控制儲存庫來使用 SSH 金鑰對身分驗證。在您開始此程序之前，必須完成下列先決條件。
+ 您必須已使用 HTTPS 控制儲存庫啟動 OpsWorks for Puppet Enterprise 伺服器，如上節所述：[步驟 1：使用 CodeCommit 做為具有 HTTPS 連線類型的儲存庫](#codecommit-puppet-https)。必須先完成此操作，您才能將所需組態上傳到 Puppet 主程式。
+ 請確定您有一個已連接 **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)資料中建立公有/私有金鑰對的指示。

1. 在 AWS CLI 工作階段中，執行下列命令，將私有金鑰檔案內容上傳至 AWS Systems Manager 參數存放區。您的 OpsWorks for Puppet Enterprise 伺服器會查詢此參數，以取得所需的憑證檔案。將 *private\$1key\$1file* 取代為 SSH 私有金鑰檔案的路徑。

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

1. 將 Systems Manager 參數存放區許可新增至您的 Puppet 主伺服器。

   1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

   1. 在左側導覽窗格中，選擇 **Roles** (角色)。

   1. 請選擇 **aws-opsworks-cm-ec2-role**。

   1. 在 **Permissions** (許可) 標籤上，選擇 **Attach policies** (連接政策)。

   1. 在 **Search (搜尋)** 列中，輸入 **AmazonSSMManagedInstanceCore**。

   1. 在搜尋結果中，選擇 **AmazonSSMManagedInstanceCore**。

   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 for 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. 更新 OpsWorks for Puppet Enterprise 伺服器的分類。在預設情況下，Puppet 代理程式每 30 分鐘會在節點上執行 (包括主節點)。若不想等待，您可以在 Puppet 主伺服器上手動執行代理程式。執行代理程式會挑選新的資訊清單檔案。

   1. 登入 Puppet Enterprise 主控台

   1. 選擇 **Classification (分類)**。

   1. 展開 **PE Infrastructure (PE 基礎設施)**。

   1. 選擇 **PE Master**。

   1. 在**組態**索引標籤上，在**新增類別****profile::codecommit**中輸入 。

      新類別 `profile::codecommit` 可能不會在執行 `puppet-code deploy` 之後立即出現。若未顯示，請選擇此頁面的 **Refresh (重新整理)**。

   1. 選擇 **Add class (新增類別)**，然後選擇 **Commit 1 change (遞交 1 變更)**。

   1. 在 OpsWorks for Puppet Enterprise 伺服器上手動執行 Puppet 代理程式。選擇 **Nodes (節點)**，在清單中選擇您的伺服器，選擇 **Run Puppet (執行 Puppet)**，然後選擇 **Run (執行)**。

1. 在 Puppet Enterprise 主控台中，變更儲存庫 URL 以使用 SSH，而非 HTTPS。您在這些步驟中執行的組態會在 OpsWorks for Puppet Enterprise 備份和還原程序期間儲存，因此您不需要在維護活動之後手動變更儲存庫組態。

   1. 選擇 **Classification (分類)**。

   1. 展開 **PE Infrastructure (PE 基礎設施)**。

   1. 選擇 **PE Master**。

   1. 在 **Configuration (組態)** 索引標籤上，找到 `puppet_enterprise::profile::master` 分類。

   1. 選擇 `r10k_remote` 參數旁的**編輯**。

   1. 將 HTTPS URL 取代為您儲存庫的 SSH URL，然後選擇 **Commit 1 change (遞交 1 變更)**。

   1. 在 OpsWorks for Puppet Enterprise 伺服器上手動執行 Puppet 代理程式。選擇 **Nodes (節點)**，在清單中選擇您的伺服器，選擇 **Run Puppet (執行 Puppet)**，然後選擇 **Run (執行)**。