

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

# 在中自动添加节点 AWS OpsWorks for Chef Automate
<a name="opscm-unattend-assoc"></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 支持 团队联系。

本主题介绍如何将亚马逊弹性计算云 (Amazon EC2) 节点自动添加到 Chef 服务器。本[初学者工具包](opscm-starterkit.md)中的代码显示如何使用无人参与的方法自动添加节点。对于如何在无人参与的情况下 (或自动) 将新的节点关联起来，我们推荐的方法是配置 [Chef Client 说明书](https://supermarket.chef.io/cookbooks/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，然后将带有节点名称的公钥传递给 OpsWorks `associate-node` API 调用。初学者工具包中包含的脚本为您收集您的组织名称、服务器名称和服务器端点。这可确保节点与 Chef 服务器相关联，运行于节点上的 `chef-client` 代理软件在与私有密钥匹配后，即可与服务器通信。

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

有关如何取消关联节点的信息，请参阅[取消节点与服务器的关联 AWS OpsWorks for Chef Automate](opscm-disassociate-node.md)本指南和 AWS OpsWorks for Chef Automate API 文档[https://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_DisassociateNode.html](https://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_DisassociateNode.html)中的。

**Topics**
+ [受支持的操作系统](#w2ab1b9c28c17c15c17)
+ [第 1 步：创建一个 IAM 角色，以用作您的实例配置文件](#opscm-create-instance-profile)
+ [第 2 步：安装 Chef Client 说明书](#w2ab1b9c28c17c15c21)
+ [第 3 步：使用自动化关联脚本创建实例](#opscm-unattend-script)
+ [自动重复运行 `chef-client` 的其他方法](#w2ab1b9c28c17c15c25)
+ [相关主题](#opscm-unattend-assoc-related)

## 受支持的操作系统
<a name="w2ab1b9c28c17c15c17"></a>

有关当前支持的节点操作系统列表，请参阅 [Chef 网站](https://docs.chef.io/platforms.html)。

## 第 1 步：创建一个 IAM 角色，以用作您的实例配置文件
<a name="opscm-create-instance-profile"></a>

创建一个 AWS Identity and Access Management (IAM) 角色用作您的 EC2 实例配置文件，并将以下策略附加到该 IAM 角色。此策略允许 AWS OpsWorks for Chef Automate (`opsworks-cm`) API 在节点注册期间与 EC2 实例通信。有关实例配置文件的更多信息，请参阅 Amazon EC2 文档中的[使用实例配置](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)文件。有关如何创建 IAM 角色的信息，请参阅 Amazon EC2 文档[中的在控制台中创建 IAM 角色](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#create-iam-role-console)。

------
#### [ JSON ]

****  

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

------

## 第 2 步：安装 Chef Client 说明书
<a name="w2ab1b9c28c17c15c21"></a>

如果您尚未执行上述操作，请按照[（替代）使用 Berkshelf 从远程源获取说明书](opscm-starterkit.md#opscm-berkshelf)中的步骤操作，以确保您的 `Policyfile.rb` 文件引用 Chef Client 说明书并安装该说明书。

## 第 3 步：使用自动化关联脚本创建实例
<a name="opscm-unattend-script"></a>

1. 要创建 EC2 实例，您可以将[新手套件](opscm-starterkit.md)中的`userdata`脚本复制到 EC2 实例说明、Amazon A EC2 uto Scaling 群组启动配置或 CloudFormation 模板`userdata`部分。有关向用户数据添加脚本的更多信息，请参阅 Amazon EC2 文档中的[启动时在 Linux 实例上运行命令](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html)。

   此脚本运行 `opsworks-cm` API [https://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_AssociateNode.html](https://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_AssociateNode.html) 命令，以将一个新的节点与您的 Chef 服务器相关联。

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

1. 按照 EC2 文档中[启动实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/launching-instance.html)中的步骤进行操作，并在此处进行修改。在 EC2 实例启动向导中，选择亚马逊 Linux AMI。

1. 在 **Configure Instance Details** 页面上，将您在 [第 1 步：创建一个 IAM 角色，以用作您的实例配置文件](#opscm-create-instance-profile)中创建的角色选为您的 IAM 角色。

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

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

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

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

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

## 自动重复运行 `chef-client` 的其他方法
<a name="w2ab1b9c28c17c15c25"></a>

尽管更难实现且不建议这样做，但您可以仅将本主题中的脚本作为独立实例用户数据的一部分运行，也可以使用 CloudFormation 模板将其添加到新的实例用户数据中，将`cron`作业配置为定期运行脚本，或者在服务`chef-client`中运行。不过，我们推荐使用 Chef Client 说明书方法，因为其他自动化技术存在一些缺点：

要查看您可以为 `chef-client` 提供的完整参数列表，请参阅 [Chef 文档](https://docs.chef.io/ctl_chef_client.html)。

## 相关主题
<a name="opscm-unattend-assoc-related"></a>

以下 AWS 博客文章提供了有关使用 Auto Scaling 群组或在多个账户中自动将节点与 Chef Automate 服务器关联的更多信息。
+ [使用 AWS fo OpsWorks r Chef Automate 通过 Auto Scaling 管理 EC2 实例](https://aws.amazon.com/blogs/mt/using-aws-opsworks-for-chef-automate-to-manage-ec2-instances-with-auto-scaling/)
+ [OpsWorks for Chef Automate — 自动引导不同账户中的节点](https://aws.amazon.com/blogs/mt/opsworks-for-chef-automate-automatically-bootstrapping-nodes-in-different-accounts/)