我有terraform
配置AWS
结构。我已经为配方执行准备了厨师,但问题是实例没有任何node_name
属性,因为它们是由Terraform
使用AutoScaling Group
和chef client
与user_data
脚本一起安装的。节点名称由chef
生成,我需要在每个实例上最初执行一些安装。我试图创建base
角色,并使用所需的操作将其更新到服务器。更新成功,但没有正在启动实例的安装。有没有办法为每个新到的实例运行命令或分配角色?与自动调节配置实例的厨师执行配方
回答
谢谢你的答案。自定义AMI不是一种选择,所以我不得不为另一种方法进行研究。原来你可以跳过chef-service-manager
部分,直接拨打chef client
。要点是您可以将JSON
文件作为参数分配给chef client
。 JSON
可以包含runlist
和/或role
,即使它是由Autoscaling group
创建的,也可以分配给新实例。由于我已经在使用user_data
,我刚刚在脚本中添加了JSON
创建,并分配了中已有runlist
的所需角色。这两个答案帮助我到达那里。现在在每个新实例中,通过user_data
我创建了一个JSON
的角色,最后我运行了chef client -f role_config.json
,之后我致电服务创建chef-service-manager
。这只是一个补丁,因为最佳选择不是将其创建为服务,而是每次都使用scheduled task
并调用json
,因为如果第二次调用同一实例,它将在将来的执行中被忽略。同样从我在Chef
文档中看到的,scheduled task
将是比使用该服务更好的选择。感谢您的答案!
有两个解决方案我能想到的:
- 添加要加载在USER_DATA的EC2s脚本的aws_instance
例如属性:
resource "aws_instance" "foo" {
ami = "ami-408c7f28"
instance_type = "t1.micro"
user_data = "**your script**"
}
- 从您自己的自定义AMI启动它们。
您必须在LaunchConfig中将配置烘焙成混合的AMI和初始化脚本。 https://github.com/coderanger/octan_demo/blob/master/tf/octan_cluster/main.tf#L156-L167和https://github.com/coderanger/octan_demo/blob/master/tf/octan_cluster/bootstrap.tpl是一个使用厨师独奏的例子(很好,本地模式,因为独奏还不支持策略,但这是一个不同的故事),但它应该给你一个想法。您可以使用类似的脚本安装Chef,创建配置,下载验证密钥(可能来自S3,使用IAM角色),然后启动第一个chef-client
运行。 https://github.com/coderanger/brix/blob/master/packer/client-bootstrap.sh是另一个更早的例子,它显示了chef-client的这种情况,在这种情况下,它正在生成基于CloudFormation数据的配置,并且Chef install +验证密钥被烘焙到AMI中。
- 1. 厨师 - 重复性配方执行
- 2. 厨师自动更新配置
- 3. 从厨师配方
- 4. Jekyll厨师配方
- 5. 厨师Apache2的web_app配置
- 6. 厨师配置ssh超时与厨师零使用
- 7. 厨师配置Apache(http.conf)
- 8. 参数化厨师配方
- 9. 写作厨师配方
- 10. 厨师在httpd配方中设置DocumentRoot
- 11. 与厨师一起启动ec2实例
- 12. 动态使用厨师配方
- 13. 配置厨师食谱的位置?
- 14. 厨师执行块
- 15. 厨师:设置并发与poise应用程序python配方
- 16. 配置厨师的码头图像
- 17. 厨师配方中的Ruby语法
- 18. 厨师更新配置文件
- 19. 厨师架构配置窗口
- 20. 厨师服务器时区配置
- 21. 如果红宝石(厨师配方)
- 22. 从配方创建厨师数据包
- 23. 厨师:测试食谱没有配方
- 24. 厨师包括配方覆盖属性
- 25. 厨师配方编译错误
- 26. 厨师 - 在配方中获取cookbook_path
- 27. 厨师:恢复默认值配方
- 28. 厨师配方编译失败
- 29. 厨师 - 如何避免重复配方
- 30. 厨师的执行顺序
选项1的问题是我不使用'aws_instance'资源。实例由'launch_configuration'和'Autoscaling Group'创建,所以我不能使用'provisioner'或绑定特定实例中的角色。 – Nephilimrising