使用创建 AWS OpsWorks for Chef Automate 服务器 AWS CloudFormation - AWS OpsWorks

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

使用创建 AWS OpsWorks for Chef Automate 服务器 AWS CloudFormation

重要

AWS OpsWorks for Chef Automate 已于 2024 年 5 月 5 日停用,新客户和现有客户均已禁用。我们建议现有客户迁移到 Chef SaaS 或其他替代解决方案。如果您有任何疑问,可以通过 re AWS : Post 或通过 Pre mium Su AWS pp ort 与 AWS Support 团队联系。

AWS OpsWorks for Chef Automate 允许你在中运行 Chef Automat e 服务器 AWS。您可以在大约 15 分钟内预置一个 Chef Automate 服务器。

从 2021 年 5 月 3 日起,将一些 Chef Automate 服务器属性 AWS OpsWorks for Chef Automate 存储在中 AWS Secrets Manager。有关更多信息,请参阅 与 AWS Secrets Manager 集成

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

先决条件

在创建新的 Chef Automate 服务器之前,请在 AWS OpsWorks for Chef Automate 外部创建一些用于访问和管理您的 Chef 服务器的资源。有关更多信息,请参阅本指南的“入门”部分的先决条件

查看《AWS CloudFormation 用户指南模板参考》的 “OpsWorks-CM” 部分,了解用于创建服务器的 AWS CloudFormation 模板中支持的值和必填值。

如果要创建使用自定义域的服务器,则需要自定义域、证书和私有密钥。您必须在 AWS CloudFormation 模板中为所有这三个参数指定值。有关、和CustomPrivateKey参数要求的更多信息 CustomDomainCustomCertificate,请参阅 AWS OpsWorks CM API 参考CreateServer中的。

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

在开始在中创建 Chef Automate 服务器之前,请生成一个 base64 编码的 RSA 密钥对。 AWS CloudFormation两者的公钥是 CreateServerAPI 中CHEF_AUTOMATE_PIVOTAL_KEY特定于 Chef EngineAttributes的值。此密钥作为 AWS CloudFormation 控制台中参数的值提供,或者在中的create-stack命令中提供 AWS CLI。要生成该密钥,建议采用以下方法。

  • 在基于 Linux 的计算机上,您可以通过运行以下 OpenSSL 命令来生成该密钥。

    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 的计算机上,您可以使用 PuTTYgen 实用工具生成 base64 编码的 RSA 密钥对。有关更多信息,请参阅 SSH.com 上的 PuTTYgen - Windows 上 PuTTY 的密钥生成器

在 AWS CloudFormation中创建 Chef Automate 服务器

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

使用 AWS CloudFormation 创建 Chef Automate 服务器(控制台)

  1. 登录 AWS Management Console 并打开 AWS CloudFormation 控制台,网址为 https://console.aws.amazon.com/cloudformation

  2. 在 AWS CloudFormation 主页上,选择创建堆栈

  3. 在 “先决条件-准备模板” 中,如果您使用的是示例 AWS CloudFormation 模板,请选择 “模板已准备就绪”。

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

    AWS CloudFormation 模板可以采用 YAML 或 JSON 格式。有一个示例 AWS CloudFormation 模板可供您使用;请务必用自己的示例值替换示例值。您可以使用 AWS CloudFormation 模板设计器来构建新模板或验证现有模板。有关如何执行此操作的更多信息,请参阅《AWS CloudFormation 用户指南》中的AWS CloudFormation Designer 界面概述

    CloudFormation “创建堆栈” 页面
  5. 指定详细信息 页面上,输入您的堆栈的名称。这将不会与您的服务器的名称相同,它仅仅是一个堆栈名称。在 Parameters (参数) 区域中,粘贴您在先决条件 中创建的值。在 Password (密码) 中输入密码。

    将 RSA 密钥文件的内容粘贴到中。PivotalKey在 AWS CloudFormation 控制台中,您必须在关键键值的每行末尾添加换行符 (\n),如以下屏幕截图所示。选择下一步

    在@@ 中指定堆栈详细信息页面 CloudFormation
  6. 配置堆栈选项 页面上,您可以向您使用堆栈创建的服务器添加标签,然后选择用于创建资源的 IAM 角色(如果您尚未在您的模板中指定要使用的 IAM 角色)。在指定选项之后,选择 Next (下一步)。有关高级选项(例如回滚触发器)的更多信息,请参阅《AWS CloudFormation 用户指南》中的设置 AWS CloudFormation 堆栈选项

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

    在等待创建堆栈时, AWS CloudFormation 请查看堆栈创建状态。如果堆栈创建失败,请查看控制台中显示的错误消息,以帮助您解决问题。有关对 AWS CloudFormation 堆栈中的错误进行故障排除的更多信息,请参阅《AWS CloudFormation 用户指南》中的排查错误

    服务器创建完成之后,您的 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

使用 AWS CloudFormation 创建 Chef Automate 服务器 (CLI)

如果您的本地计算机尚未运行 AWS CLI,请 AWS CLI 按照 AWS 命令行界面用户指南中的安装说明下载并安装。本部分未介绍可以与 create-stack 命令结合使用的所有参数。有关 create-stack 参数的更多信息,请参阅 create-stack 参考 中的 AWS CLI

  1. 请务必完成创建 AWS OpsWorks for Chef Automate 服务器的 先决条件

  2. 创建服务角色和实例配置文件。 AWS OpsWorks 提供了一个可用于创建两者的 AWS CloudFormation 模板。运行以下 AWS CLI 命令创建一个 AWS CloudFormation 堆栈,用于为您创建服务角色和实例配置文件。

    aws cloudformation create-stack --stack-name OpsWorksCMRoles --template-url https://s3.amazonaws.com/opsworks-cm-us-east-1-prod-default-assets/misc/opsworks-cm-roles.yaml --capabilities CAPABILITY_NAMED_IAM

    创建 AWS CloudFormation 完堆栈后,在您的账户中查找并复制服务角色的 ARN。

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

    list-roles 命令的结果中,查找类似于以下内容的服务角色和实例配置文件条目。记下服务角色和实例配置文件的 ARN,然后将其添加到用于创建服务器堆栈的 AWS CloudFormation 模板中。

    { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" } } ] }, "RoleId": "AROZZZZZZZZZZQG6R22HC", "CreateDate": "2018-01-05T20:42:20Z", "RoleName": "aws-opsworks-cm-ec2-role", "Path": "/service-role/", "Arn": "arn:aws:iam::000000000000:role/service-role/aws-opsworks-cm-ec2-role" }, { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "opsworks-cm.amazonaws.com" } } ] }, "RoleId": "AROZZZZZZZZZZZZZZZ6QE", "CreateDate": "2018-01-05T20:42:20Z", "RoleName": "aws-opsworks-cm-service-role", "Path": "/service-role/", "Arn": "arn:aws:iam::000000000000:role/service-role/aws-opsworks-cm-service-role" }
  3. 再次运行该create-stack命令来创建 AWS OpsWorks for Chef Automate 服务器。

    • stack_name 替换为您的堆栈的名称。这是 AWS CloudFormation 堆栈的名称,而不是你的 Chef Automate 服务器的名称。Chef Automate 服务器名称是 AWS CloudFormation 模板ServerName中的值。

    • template 替换为您的模板文件的路径,并将扩展名 yaml 或 json 相应地替换为 .yaml.json

    • 的值对--parameters应于 CreateServerAPI EngineAttributes中的值。对于 Chef,用户提供的用于创建服务器的引擎属性为 CHEF_AUTOMATE_PIVOTAL_KEY(您使用先决条件 中介绍的实用工具生成的 base64 编码的 RSA 公共密钥)和 CHEF_AUTOMATE_ADMIN_PASSWORD(您创建的一个长度介于 8 到 32 个字符的密码)。有关 CHEF_AUTOMATE_ADMIN_PASSWORD 的更多信息,请参阅 使用 Chef Automate 服务器创建 AWS 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_PASSWORDCHEF_AUTOMATE_PIVOTAL_KEY 属性的示例值。如果您未在 AWS 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"
  4. 堆栈创建完成后,在 AWS OpsWorks for Chef Automate 控制台中打开新服务器的 “属性” 页面,然后下载入门套件。下载新的初学者工具包将重置 Chef Automate 控制面板管理员密码。

  5. 如果您的服务器将使用自定义域、证书和私钥,请按照 (可选)配置 knife 使用自定义域 中的步骤配置 knife.rb,然后继续执行步骤 7。

    如果您不使用自定义域,请从以下 Amazon S3 存储桶位置下载根证书颁发机构 (CA) 证书:https://s3.amazonaws.com/opsworks-cm-us-east-1-prod-default-assets/misc/opsworks-cm-ca-2020-root.pem。将证书文件保存到一个安全便利的位置。在下一步中配置 knife.rb 时将需要使用该证书。

  6. 要在新服务器上使用 knife 命令,请更新 Chef knife.rb 配置文件设置。初学者工具包中包括一个示例 knife.rb 文件。以下示例演示如何在不使用自定义域的服务器上设置 knife.rb。如果您使用的是自定义域,请参阅(可选)配置 knife 使用自定义域了解 knife 配置说明。

    • ENDPOINT 替换为该服务器的终端节点值。这是堆栈创建操作的部分输出。您可以通过运行以下命令来获取终端节点。

      aws cloudformation describe-stacks --stack-name stack_name
    • client_key 配置中的 key_pair_file.pem 替换为包含用于创建服务器的 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')
  7. 服务器创建过程完成后,请转到使用初学者工具包配置 Chef Server。如果堆栈创建失败,请查看控制台中显示的错误消息,以帮助您解决问题。有关对 AWS CloudFormation 堆栈中的错误进行故障排除的更多信息,请参阅《AWS CloudFormation 用户指南》中的故障排除