在 AWS OpsWorks for Chef Automate 自动添加节点 - AWS OpsWorks

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

在 AWS OpsWorks for Chef Automate 自动添加节点

重要

AWS OpsWorks 因为 Chef Automate 不再接受新客户。现有客户在 2024 年 5 月 5 日之前不会受到影响,届时该服务将不可用。我们建议现有客户迁移到 Chef SaaS 或其他替代解决方案。有关更多信息,请参阅Chef Automate 生命周期终止常见问题解答的 AWS OpsWorks

本主题介绍如何将 Amazon Elastic Compute Cloud (Amazon EC2) 节点自动添加到 Chef 服务器。本初学者工具包中的代码显示如何使用无人参与的方法自动添加节点。对于如何在无人参与的情况下 (或自动) 将新的节点关联起来,我们推荐的方法是配置 Chef Client 说明书。您可以使用初学者工具包中的 userdata 脚本,并更改 userdata 脚本的 run_list 部分,或使用要应用于节点的说明书更改 Policyfile.rb。在您运行 chef-client 代理之前,请将 Chef Client 说明书安装到您的 Chef 服务器,然后使用某种角色(例如 HTTPD 角色)以服务模式安装 chef-client 代理,如以下示例命令所示。

chef-client -r "chef-client,role[httpd]"

要与 Chef 服务器通信,chef-client 代理软件必须拥有客户端节点的公有密钥的访问权。您可以在 Amazon EC2 上生成公私秘钥对,然后使用节点名称将公有密钥传递给 AWS OpsWorks associate-node API 调用。初学者工具包中包含的脚本为您收集您的组织名称、服务器名称和服务器端点。这可确保节点与 Chef 服务器相关联,运行于节点上的 chef-client 代理软件在与私有密钥匹配后,即可与服务器通信。

在与 AWS OpsWorks for Chef Automate 服务器关联的节点上,chef-client 的最低支持版本为 13.x。建议您运行最新、最稳定的 chef-client 版本

关于如何解除与节点的关联的更多信息,请参阅本指南中的 取消节点与 AWS OpsWorks for Chef Automate 服务器的关联以及 API 文档中的disassociate-nodeAWS OpsWorks for Chef Automate。

受支持的操作系统

有关当前支持的节点操作系统列表,请参阅 Chef 网站

第 1 步:创建一个 IAM 角色,以用作您的实例配置文件

创建一个 AWS Identity and Access Management (IAM) 角色,以用作您的 EC2 实例配置文件,并将以下策略附加到 IAM 角色。该策略准许 AWS OpsWorks for Chef Automate (opsworks-cm) API 在节点注册期间与 EC2 实例通信。有关实例配置文件的更多信息,请参阅 Amazon EC2 文档中的使用实例配置文件。有关如何创建 IAM 角色的信息,请参阅 Amazon EC2 文档中的在控制台中创建 IAM 角色

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "opsworks-cm:AssociateNode", "opsworks-cm:DescribeNodeAssociationStatus", ], "Resource": "*", "Effect": "Allow" } ] }

AWS OpsWorks 提供一个 AWS CloudFormation 模板,您可用来通过前述的策略声明创建 IAM 角色。以下 AWS CLI 命令使用此模板为您创建实例配置文件角色。如果您希望在默认区域中创建新的 AWS CloudFormation 堆栈,则可以忽略 --region 参数。

aws cloudformation --region region ID create-stack --stack-name myChefAutomateinstanceprofile --template-url https://s3.amazonaws.com/opsworks-cm-us-east-1-prod-default-assets/misc/opsworks-cm-nodes-roles.yaml --capabilities CAPABILITY_IAM

第 2 步:安装 Chef Client 说明书

如果您尚未执行上述操作,请按照(替代)使用 Berkshelf 从远程源获取说明书中的步骤操作,以确保您的 Policyfile.rb 文件引用 Chef Client 说明书并安装该说明书。

第 3 步:使用自动化关联脚本创建实例

  1. 要创建 EC2 实例,您可以将初学者工具包中的 userdata 脚本复制到 EC2 实例说明的 userdata 部分、Amazon EC2 Auto Scaling 组启动配置或 AWS CloudFormation 模板。有关将脚本添加将到用户数据的更多信息,请参阅 Amazon EC2 文档中的启动时对您的 Linux 实例运行命令

    此脚本运行 opsworks-cm API associate-node 命令,以将一个新的节点与您的 Chef 服务器相关联。

    默认情况下,新注册的节点的名称即是实例 ID,但您可以通过修改 userdata 脚本中的 NODE_NAME 变量的值来更改这个名称。由于当前无法在 Chef 控制台 UI 上更改组织名称,请将 CHEF_AUTOMATE_ORGANIZATION 设置为 default

  2. 按照 EC2 文档中启动实例的说明操作,修改见此处。在 EC2 实例启动向导中,选择 Amazon Linux AMI。

  3. Configure Instance Details 页面上,将您在 第 1 步:创建一个 IAM 角色,以用作您的实例配置文件中创建的角色选为您的 IAM 角色。

  4. Advanced Details 区域中,上传您在此过程较早时创建的 userdata.sh 脚本。

  5. 无需在 Add Storage 页面上进行更改。转到 Add Tags

  6. Configure Security Group 页上,选择 Add Rule,然后选择类型 HTTP,在此例中为 Apache Web 服务器打开端口 443 和 80。

  7. 选择 Review and Launch,然后选择 Launch。当您的新节点启动时,它会应用您在 RUN_LIST 参数中指定的配方所指定的配置。

  8. 可选:如果您已将 nginx 说明书添加到运行列表中,当您打开与您的新节点的公有 DNS 相链接的网页时,您应看到由 nginx Web 服务器托管的网站。

自动重复运行 chef-client 的其他方法

您可以将本主题中的脚本作为独立实例用户数据组成部分独立运行,使用 AWS CloudFormation 模板将其添加到新的实例用户数据,配置 cron 作业以定时运行脚本,或者在服务中运行 chef-client,但这实现起来比较困难,我们不推荐这么做。不过,我们推荐使用 Chef Client 说明书方法,因为其他自动化技术存在一些缺点:

要查看您可以为 chef-client 提供的完整参数列表,请参阅 Chef 文档

以下 AWS 博客文章提供了详细信息,介绍使用 Auto Scaling 组或者在多个账户中,自动将节点与您 Chef Automate 服务器相关联。