【问题标题】:Tag Nodes With Chef Roles Using cloudformation使用 cloudformation 使用 Chef 角色标记节点
【发布时间】:2026-01-05 09:35:02
【问题描述】:

所以我的目标是使用 cloudformation 在云中启动 100 个节点,我想在我的 cloudformation 脚本中用厨师角色标记节点,而不是使用刀。我已经将我的 cloudformation 节点设置为自动向厨师服务器注册,我想使用向厨师服务器报告他们的角色,以便厨师服务器在每个节点上安装正确的说明书(取决于节点角色)。我知道用刀可以做到这一点,但我想将节点角色隐藏在我的 cloudformation 脚本中。

我该怎么做?

【问题讨论】:

    标签: amazon-web-services chef-infra puppet amazon-cloudformation


    【解决方案1】:

    我和厨师一起做这个。我通常在 S3 中放置一个 json 文件,描述机器需要使用的角色。我在 CloudFormation 中创建了一个可以访问 S3 存储桶的 IAM 用户。然后,在我的用户数据脚本中,我首先从 S3 获取文件,然后运行 ​​chef-client -j /path/to/json/file。我对验证密钥 fwiw 执行相同的操作,以便节点可以自行注册。

    HTH

    【讨论】:

    • 谢谢。这是否意味着我需要为部署中的每个角色创建一个单独的 json 文件?
    • 每个“节点类型”都需要一个,也就是run_list。如果您的节点对其 run_list 使用单个角色,那么是的。以下是我的工作要点:gist.github.com/4218533
    【解决方案2】:

    我使用 Puppet,这当然与 Chef 略有不同,但应该适用相同的理论。我在启动新实例时(也通过 CloudFormation)发送一个 JSON 对象作为用户数据,然后在 Puppet 中访问此数据以进行动态配置。

    Puppet 会自动处理很多此类问题 - 例如它会自动为我设置 FACTOR_EC2_USER_DATA 环境变量,所以我只需要将 JSON 解析为 $role 和 $environment 等变量,此时我可以动态决定应该为实例分配哪个角色。

    因此,只要您能找到某种方法在 Chef 中访问用户数据,同样的方法应该可以工作。

    【讨论】: