

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

# 使用创建 AWS OpsWorks for Chef Automate 服务器 CloudFormation
<a name="opscm-create-server-cfn"></a>

**重要**  
AWS OpsWorks for Chef Automate 已于 2024 年 5 月 5 日停用，新客户和现有客户均已禁用。我们建议现有客户迁移到 Chef SaaS 或其他替代解决方案。如果您有任何疑问，可以通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

AWS OpsWorks for Chef Automate 允许你在中运行 [Chef Automat](https://www.chef.io/automate/) e 服务器 AWS。您可以在大约 15 分钟内预置一个 Chef Automate 服务器。

从 2021 年 5 月 3 日起，将一些 Chef Automate 服务器属性 AWS OpsWorks for Chef Automate 存储在中 AWS Secrets Manager。有关更多信息，请参阅 [与集成 AWS Secrets Manager](data-protection.md#data-protection-secrets-manager)。

以下演练可帮助您 AWS OpsWorks for Chef Automate 通过在中创建堆栈来创建服务器。 CloudFormation

**Topics**
+ [先决条件](#opscm-create-server-cfn-prereqs)
+ [在 CloudFormation中创建 Chef Automate 服务器](#opscm-create-server-cfn-main)

## 先决条件
<a name="opscm-create-server-cfn-prereqs"></a>

在创建新的 Chef Automate 服务器之前，请在 AWS OpsWorks for Chef Automate 外部创建一些用于访问和管理您的 Chef 服务器的资源。有关更多信息，请参阅本指南的“入门”部分的[先决条件](gettingstarted-opscm.md#gettingstarted-opscm-prereq)。

查看《*CloudFormation 用户指南*模板参考》的 “[OpsWorks-CM” 部分](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworkscm-server.html)，了解用于创建服务器的 CloudFormation 模板中支持的值和必填值。

如果要创建使用自定义域的服务器，则需要自定义域、证书和私有密钥。您必须在 CloudFormation 模板中为所有这三个参数指定值。有关、和`CustomPrivateKey`参数要求的更多信息 `CustomDomain``CustomCertificate`，请参阅 *OpsWorks CM API 参考[CreateServer](https://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_CreateServer.html)*中的。

为 `CHEF_AUTOMATE_ADMIN_PASSWORD` 引擎属性创建一个密码值。该密码的最小长度为 8 个字符，最大长度为 32 个字符。该密码可以包含字母、数字和特殊字符 `(!/@#$%^+=_)`。该密码必须至少包含一个小写字母、一个大写字母、一个数字和一个特殊字符。您可以在 CloudFormation 模板中指定此密码，或者在创建堆栈时指定为`CHEF_AUTOMATE_ADMIN_PASSWORD`参数的值。

在开始在中创建 Chef Automate 服务器之前，请生成一个 base64 编码的 RSA 密钥对。 CloudFormation两者的公钥是 [CreateServer](https://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_CreateServer.html)API 中`CHEF_AUTOMATE_PIVOTAL_KEY`特定于 Chef [EngineAttributes](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworkscm-server.html#cfn-opsworkscm-server-engineattributes)的值。此密钥作为 CloudFormation 控制台中**参数**的值提供，或者在中的**create-stack**命令中提供 AWS CLI。要生成该密钥，建议采用以下方法。
+ 在基于 Linux 的计算机上，您可以通过运行以下 [OpenSSL](https://www.openssl.org/) 命令来生成该密钥。

  ```
  openssl genrsa -out pivotal_key_file_name.pem 2048
  ```

  然后，将该对的 RSA 公有密钥部分导出到文件。成为 `CHEF_AUTOMATE_PIVOTAL_KEY` 值的公有密钥。

  ```
  openssl rsa -in pivotal_key_file_name.pem -pubout -out public.pem -outform PEM
  ```
+ 在基于 Windows 的计算机上，你可以使用 Pu TTYgen 实用程序生成 base64 编码的 RSA 密钥对。欲了解更多信息，请参阅 SSH.com 上的 [Pu TTYgen -Windows 上的 Putty 密钥生成器](https://www.ssh.com/ssh/putty/windows/puttygen)。

## 在 CloudFormation中创建 Chef Automate 服务器
<a name="opscm-create-server-cfn-main"></a>

本节介绍如何使用 CloudFormation 模板来构建用于创建 AWS OpsWorks for Chef Automate 服务器的堆栈。您可以使用 CloudFormation 控制台或 AWS CLI. 您可以使用[示例 CloudFormation 模板](samples/opsworkscm-server.zip)来构建 AWS OpsWorks for Chef Automate 服务器堆栈。请务必使用您自己的服务器名称、IAM 角色、实例配置文件、服务器描述、备份保留计数、维护选项和可选标签来更新示例模板。如果您的服务器将使用自定义域，则必须在 CloudFormation 模板中为`CustomDomain``CustomCertificate`、和`CustomPrivateKey`参数指定值。可以在 CloudFormation 模板中指定`CHEF_AUTOMATE_ADMIN_PASSWORD`和`CHEF_AUTOMATE_PIVOTAL_KEY`引擎属性及其值，或者仅提供属性，然后在 “ CloudFormation **创建堆栈**” 向导或**create-stack**命令中为属性指定值。有关这些属性的更多信息，请参阅本指南的“入门”部分的[在中创建一个 Chef Automate 服务器 AWS 管理控制台](gettingstarted-opscm-create.md#gettingstarted-opscm-create-console)。

**Topics**
+ [使用 CloudFormation 创建 Chef Automate 服务器（控制台）](#opscm-create-server-cfn-console)
+ [使用 CloudFormation 创建 Chef Automate 服务器 (CLI)](#opscm-create-server-cfn-cli)

### 使用 CloudFormation 创建 Chef Automate 服务器（控制台）
<a name="opscm-create-server-cfn-console"></a>

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/cloudformat](https://console.aws.amazon.com/cloudformation/) ion 上打开 CloudFormation 控制台。

1. 在 CloudFormation 主页上，选择**创建堆栈**。

1. 在 “**先决条件-准备模板**” 中，如果您使用的是[示例 CloudFormation 模板](samples/opsworkscm-server.zip)，请选择 “**模板已准备就绪**”。

1. 在 **Specify template (指定模板)** 中，选择模板的源。在本演练中，选择**上传模板文件**，然后上传用于创建 Chef Automate 服务器的 CloudFormation 模板。浏览查找您的模板文件，然后选择 **Next (下一步)**。

    CloudFormation 模板可以采用 YAML 或 JSON 格式。有一个[示例 CloudFormation 模板](samples/opsworkscm-server.zip)可供您使用；请务必用自己的示例值替换示例值。您可以使用 CloudFormation 模板设计器来构建新模板或验证现有模板。有关如何执行此操作的更多信息，请参阅《*CloudFormation 用户指南》*中的[CloudFormation Designer 界面概述](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/working-with-templates-cfn-designer-overview.html)。  
![\[CloudFormation 创建堆栈页面\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/cfn_select_template.png)

1. 在 **指定详细信息** 页面上，输入您的堆栈的名称。这将不会与您的服务器的名称相同，它仅仅是一个堆栈名称。在 **Parameters (参数)** 区域中，粘贴您在[先决条件](#opscm-create-server-cfn-prereqs)中创建的值。在 **Password (密码)** 中输入密码。

   将 RSA 密钥文件的内容粘贴到中。**PivotalKey**在 CloudFormation 控制台中，您必须在关键键值的每行末尾添加换行符 (**\$1n**)，如以下屏幕截图所示。选择**下一步**。  
![\[在@@ 中指定堆栈详细信息页面 CloudFormation\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/cfn_template_params_opscm.png)

1. 在 **配置堆栈选项 **页面上，您可以向您使用堆栈创建的服务器添加标签，然后选择用于创建资源的 IAM 角色（如果您尚未在您的模板中指定要使用的 IAM 角色）。在指定选项之后，选择 **Next (下一步)**。有关高级选项（例如回滚触发器）的更多信息，请参阅*《CloudFormation 用户指南*》中的[设置 CloudFormation 堆栈选项](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-add-tags.html)。

1. 在**审核**页面上，审核您的选择。在准备好创建服务器堆栈时，选择 **Create stack (创建堆栈)**。

   在等待创建堆栈时， CloudFormation 请查看堆栈创建状态。如果堆栈创建失败，请查看控制台中显示的错误消息，以帮助您解决问题。有关对 CloudFormation 堆栈中的错误进行故障排除的更多信息，请参阅《*CloudFormation 用户指南*》中的[排查错误](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html#troubleshooting-errors)。

   服务器创建完成之后，您的 Chef Automate 服务器将会出现在 AWS OpsWorks for Chef Automate 主页上，其状态为 **online (在线)**。从服务器的“属性”页面生成一个新的初学者工具包和 Chef Automate 控制面板凭证。服务器联机之后，Chef Automate 控制面板在服务器的域上可用，位于以下格式的 URL 上：`https://your_server_name-randomID.region.opsworks-cm.io`。
**注意**  
如果您为服务器指定了自定义域、证书和私钥，请在企业的 DNS 管理工具中创建一个 CNAME 条目，将您的自定义域映射到为服务器 AWS OpsWorks for Chef Automate 自动生成的终端节点。在将生成的终端节点映射到自定义域值之前，您无法管理服务器或连接到服务器的 Chef Automate 控制面板。  
要获取生成的端点值，请在服务器联机后运行以下 AWS CLI 命令：  

   ```
   aws opsworks describe-servers --server-name server_name
   ```

### 使用 CloudFormation 创建 Chef Automate 服务器 (CLI)
<a name="opscm-create-server-cfn-cli"></a>

如果您的本地计算机尚未运行 AWS CLI，请 AWS CLI 按照 *AWS 命令行界面用户指南*中的[安装说明](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)下载并安装。本部分未介绍可以与 **create-stack** 命令结合使用的所有参数。有关 **create-stack** 参数的更多信息，请参阅 [**create-stack** 参考](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html) 中的 *AWS CLI *。

1. 请务必完成创建 AWS OpsWorks for Chef Automate 服务器的 [先决条件](gettingstarted-opscm.md#gettingstarted-opscm-prereq)。

1. 创建服务角色和实例配置文件。

   在您的账户中查找并复制服务角色。 ARNs 

   ```
   aws iam list-roles --path-prefix "/service-role/" --no-paginate
   ```

   在 `list-roles` 命令的结果中，查找类似于以下内容的服务角色和实例配置文件条目。记下 ARNs服务角色和实例配置文件，并将它们添加到用于创建服务器堆栈的 CloudFormation 模板中。

1. 再次运行该**create-stack**命令来创建 AWS OpsWorks for Chef Automate 服务器。
   + *stack\$1name*替换为堆栈的名称。这是 CloudFormation 堆栈的名称，而不是你的 Chef Automate 服务器的名称。Chef Automate 服务器名称是 CloudFormation 模板`ServerName`中的值。
   + *template*替换为模板文件的路径，并根据需要将扩展名*yaml or json*替换`.json`为`.yaml`或。
   + 的值对`--parameters`应于 [CreateServer](https://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_CreateServer.html)API [EngineAttributes](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworkscm-server.html#cfn-opsworkscm-server-engineattributes)中的值。对于 Chef，用户提供的用于创建服务器的引擎属性为 `CHEF_AUTOMATE_PIVOTAL_KEY`（您使用[先决条件](#opscm-create-server-cfn-prereqs)中介绍的实用工具生成的 base64 编码的 RSA 公共密钥）和 `CHEF_AUTOMATE_ADMIN_PASSWORD`（您创建的一个长度介于 8 到 32 个字符的密码）。有关 `CHEF_AUTOMATE_ADMIN_PASSWORD` 的更多信息，请参阅 [使用 Chef Automate 服务器创建 AWS CLI](gettingstarted-opscm-create.md#gettingstarted-opscm-create-cli) 您可以提供一个指向包含您的关键密钥的 PEM 文件的指针来作为 `PivotalKey` 参数的值，如示例中所示。如果模板中`CHEF_AUTOMATE_PIVOTAL_KEY`未指定`CHEF_AUTOMATE_ADMIN_PASSWORD`和的值，则必须在 AWS CLI 命令中提供这些值。

   ```
   aws cloudformation create-stack --stack-name stack_name --template-body file://template.yaml or json --parameters ParameterKey=PivotalKey,ParameterValue="base64_encoded_RSA_public_key_value"
   ```

   下面是一个示例，其中包括了 `CHEF_AUTOMATE_ADMIN_PASSWORD` 和 `CHEF_AUTOMATE_PIVOTAL_KEY` 属性的示例值。如果您未在 CloudFormation 模板中为这些属性指定值，请运行类似的命令。

   ```
   aws cloudformation create-stack --stack-name "OpsWorksCMChefServerStack" --template-body file://opsworkscm-server.yaml --parameters ParameterKey=PivotalKey,ParameterValue="$(openssl rsa -in "pivotalKey.pem" -pubout)" ParameterKey=Password,ParameterValue="SuPer\$ecret890"
   ```

1. 堆栈创建完成后，在 AWS OpsWorks for Chef Automate 控制台中打开新服务器的 “属性” 页面，然后下载入门套件。下载新的初学者工具包将重置 Chef Automate 控制面板管理员密码。

1. 如果您的服务器将使用自定义域、证书和私钥，请按照 [（可选）配置 `knife` 使用自定义域](opscm-starterkit.md#opscm-starterkit-customdomain) 中的步骤配置 `knife.rb`，然后继续执行步骤 7。

1. 要在新服务器上使用 `knife` 命令，请更新 Chef `knife.rb` 配置文件设置。初学者工具包中包括一个示例 `knife.rb` 文件。以下示例演示如何在不使用自定义域的服务器上设置 `knife.rb`。如果您使用的是自定义域，请参阅[（可选）配置 `knife` 使用自定义域](opscm-starterkit.md#opscm-starterkit-customdomain)了解 `knife` 配置说明。
   + *ENDPOINT*替换为服务器的端点值。这是堆栈创建操作的部分输出。您可以通过运行以下命令来获取终端节点。

     ```
     aws cloudformation describe-stacks --stack-name stack_name 
     ```
   + *key\$1pair\$1file.pem*在`client_key`配置中替换为包含用于创建服务器`CHEF_AUTOMATE_PIVOTAL_KEY`的 PEM 文件的名称。

     ```
     base_dir = File.join(File.dirname(File.expand_path(__FILE__)), '..')
     
     log_level                :info
     log_location             STDOUT
     node_name                'pivotal'
     client_key               File.join(base_dir, '.chef', 'key_pair_file.pem')
     syntax_check_cache_path  File.join(base_dir, '.chef', 'syntax_check_cache')
     cookbook_path            [File.join(base_dir, 'cookbooks')]
     
     chef_server_url          'ENDPOINT/organizations/default'
     ssl_ca_file              File.join(base_dir, '.chef', 'ca_certs', 'opsworks-cm-ca-2020-root.pem')
     trusted_certs_dir        File.join(base_dir, '.chef', 'ca_certs')
     ```

1. 服务器创建过程完成后，请转到[使用初学者工具包配置 Chef Server](opscm-starterkit.md)。如果堆栈创建失败，请查看控制台中显示的错误消息，以帮助您解决问题。有关对 CloudFormation 堆栈中的错误进行故障排除的更多信息，请参阅《*CloudFormation 用户指南*》中的[故障排除](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html#troubleshooting-errors)。