可选:使用 AWS CodeCommit 作为 Puppet r10k 远程控制存储库 - AWS OpsWorks

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

可选:使用 AWS CodeCommit 作为 Puppet r10k 远程控制存储库

重要

AWS OpsWorks for Puppet Enterprise不再接受新客户。现有客户在 2024 年 3 月 31 日之前不会受到影响,届时该服务将不可用。我们建议现有客户尽快迁移到其他解决方案。有关更多信息,请参阅 AWS OpsWorks for Puppet Enterprise 生命周期终止常见问题解答如何将 OpsWorks for Puppet Enterprise 服务器迁移到 Amazon Elastic Cloud (Amazon EC2)

可使用 AWS CodeCommit 创建新的存储库,并将它用作 r10k 远程控制存储库。要完成本节中的步骤并使用 CodeCommit 存储库,您需要一个拥有 awscodeCommitReadOnly 托管策略所提供权限的用户。

步骤 1:使用 CodeCommit 作为带 HTTPS 连接类型的存储库

  1. 在 CodeCommit 控制台中,创建新的存储库。

    
                     在 CodeCommit 中创建新的存储库。
  2. 选择 Skip 以跳过设置 Amazon SNS 主题这一操作。

  3. Code 页面上,选择 Connect to your repository

  4. Connect to your repository 页面上,选择 HTTPS 作为 Connection type,然后选择您的操作系统。

    
                     在 CodeCommit 中创建新的存储库。

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

  5. 关闭 Connect to your repository 页面,并返回 OpsWorks for Puppet Enterprise 服务器设置。

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

  7. 在 IAM; 控制台中,将 AWSCodeCommitReadOnly 策略附加到 Puppet Master 的实例配置文件角色。有关如何将策略附加到 IAM 角色的更多信息,请参阅 IAM 用户指南 中的添加 IAM 身份权限(控制台)

  8. 执行AWS CodeCommit用户指南 中的使用 Git 凭证的 HTTPS 用户的设置中的步骤可将现有 control-repo 内容推送到新的 CodeCommit 存储库。

  9. 现在,您可以按照 使用初学者工具包配置 Puppet Master中的说明继续操作,并使用初学者工具包将代码部署到您的 Puppet Master。以下命令是一个示例。

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

步骤 2:(可选)使用 CodeCommit 作为带 SSH 连接类型的存储库

您可以将 AWS CodeCommit r10k 远程控制存储库配置为使用 SSH 密钥对身份验证。在开始此过程之前,必须完成以下先决条件。

  1. 在 AWS CLI 会话中,运行以下命令将私有密钥文件内容上传到 AWS Systems Manager Parameter Store。您的 OpsWorks for Puppet Enterprise 服务器需要此参数以获取所需的证书文件。将 private_key_file 替换为您的 SSH 私有密钥文件的路径。

    aws ssm put-parameter --name puppet_user_pk --type String --value "`cat private_key_file`"
  2. 将 Systems Manager Parameter Store 权限添加到 Puppet Master。

    1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

    2. 在左侧导航窗格中,选择 Roles(角色)。

    3. 选择 aws-opsworks-cm-ec2-role

    4. Permissions(权限)选项卡上,选择 Attach policies(附加策略)。

    5. Search (搜索) 栏中,输入 AmazonSSMManagedInstanceCore

    6. 在搜索结果中,选择 AmazonEC2RoleforSSM

    7. 选择 Attach policy(附上策略)。

  3. 创建配置文件清单。如果您使用的是初学者工具包中提供的 control-repo-example 存储库,请在示例存储库中显示的位置创建以下文件。否则,请根据您自己的控制存储库结构创建这些文件。将 IAM_USER_SSH_KEY 值替换为您在此过程的先决条件中创建的 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', } }
  4. 将您的控制存储库推送到 CodeCommit。运行以下命令以将新的清单文件推送到您的存储库。

    git add ./site/profile/manifests/codecommit.pp git commit -m 'Configuring for SSH connection to CodeCommit' git push origin production
  5. 部署清单文件。运行以下命令将更新后的配置部署到您的 OpsWorks for Puppet Enterprise 服务器。将 STARTER_KIT_DIRECTORY 替换为 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
  6. 更新 OpsWorks for Puppet Enterprise 服务器的分类。默认情况下,Puppet 代理每 30 分钟在节点(包括 Master)上运行一次。要避免等待,您可以手动在 Puppet Master 上运行代理。运行代理将选取新清单文件。

    1. 登录 Puppet Enterprise 控制台。

    2. 选择分类

    3. 展开 PE 基础设施

    4. 选择 PE Master

    5. 配置选项卡上,在添加新类中输入profile::codecommit

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

    6. 选择添加类,然后选择提交 1 更改

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

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

    1. 选择分类

    2. 展开 PE 基础设施

    3. 选择 PE Master

    4. 配置选项卡上,找到 puppet_enterprise::profile::master 类。

    5. 选择 r10k_remote 参数旁边的编辑

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

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