所以我的目标是使用cloudformation在云中启动100个节点,我想在我的cloudformation脚本中标记带有厨师角色的节点而不是使用刀。我已经设置了我的cloudformation节点以自动向Chef服务器注册自己,并且我想将其角色报告给Chef服务器,以便厨师服务器在每个节点上安装适当的cookbook(取决于节点角色)。我知道这可以用刀,但我想将节点角色埋在我的cloudformation脚本中。
我该怎么办?
答案 0 :(得分:0)
我使用Puppet,这当然与Chef略有不同,但同样的理论应该适用。我在启动新实例时(也通过CloudFormation)发送JSON对象作为用户数据,然后在Puppet中访问此数据以进行动态配置。
Puppet会自动处理大量此事 - 例如它会自动为我设置FACTOR_EC2_USER_DATA环境变量,所以我只需要将JSON解析为变量,例如$ role和$ environment,此时我可以动态决定应该为该实例分配哪个角色。
因此,只要您能找到一些方法来访问Chef内的用户数据,同样的方法应该有效。
答案 1 :(得分:0)
我和厨师一起做这件事。我通常在S3中放入一个json文件,它描述了机器需要使用的角色。我在CloudFormation中创建了一个可以访问S3存储桶的IAM用户。然后,在我的用户数据脚本中,我首先从S3获取文件,然后运行chef-client -j / path / to / json / file。我使用验证密钥fwiw执行相同的操作,以便节点可以自行注册。
HTH