Amazon web services 在自动缩放配置的实例上使用chef执行配方
我有一个Amazon web services 在自动缩放配置的实例上使用chef执行配方,amazon-web-services,chef-infra,autoscaling,terraform,aws-opsworks,Amazon Web Services,Chef Infra,Autoscaling,Terraform,Aws Opsworks,我有一个terraform配置的AWS结构。我已经为配方执行准备好了chef,但问题是实例没有任何节点名称属性,因为它们是由Terraform使用AutoScaling Group和chef client安装的用户数据脚本配置的。节点名由chef生成,我需要在每个实例上执行一些初始安装。我已经尝试创建base角色,并使用所需的操作将其更新到服务器。更新成功,但没有在实例上启动安装。有没有办法运行命令或为每个新到达的实例分配角色?我可以想到两种解决方案: 将要加载的脚本添加到 例如: 从您自己的自
terraform
配置的AWS
结构。我已经为配方执行准备好了chef,但问题是实例没有任何节点名称
属性,因为它们是由Terraform
使用AutoScaling Group
和chef client
安装的用户数据
脚本配置的。节点名由chef
生成,我需要在每个实例上执行一些初始安装。我已经尝试创建base
角色,并使用所需的操作将其更新到服务器。更新成功,但没有在实例上启动安装。有没有办法运行命令或为每个新到达的实例分配角色?我可以想到两种解决方案:
您必须在LaunchConfig中将配置烘焙到AMI和初始化脚本的混合中。这是一个使用chef solo的例子(好吧,本地模式,因为solo还不支持策略,但这是另一个故事),但它应该给你一个想法。您将有一个类似的脚本来安装Chef、创建配置、下载验证密钥(可能使用IAM角色从S3下载),然后启动第一个
Chef客户机
运行。是很久以前的另一个例子,它向chef客户端展示了这一点,在这种情况下,它基于CloudFormation数据生成配置,chef install+验证密钥被烘焙到AMI中。谢谢您的回答。自定义AMI不是一个选项,所以我不得不研究一种不同的方法。原来你可以跳过厨师服务经理的部分,直接打电话给厨师客户。关键是您可以将JSON
文件作为参数分配给chef-client
。JSON
可以包含runlist
和/或角色
,这些角色可以分配给新实例,即使它是由自动缩放组创建的。因为我已经在使用user\u data
了,所以我只是在脚本中添加了JSON
创建,并分配了所需的角色,该角色在Chef服务器中已经有runlist
。两个答案都帮助我达到了目的。现在,在每个新实例上,通过user\u data
我使用角色创建一个JSON
,最后运行chef client-f role\u config.JSON
,然后调用服务创建chef service manager
。这只是一个补丁,因为最好的选择不是将其创建为服务,而是使用scheduled task
并每次调用json
,因为如果为同一实例第二次调用它,它将在将来的执行中被忽略。同样从我在Chef
文档中读到的内容来看,预定任务
将是比使用服务更好的选择。谢谢你的回答 选项1的问题是我没有使用aws\u实例
资源。实例是由launch\u configuration
和Autoscaling Group
创建的,因此我无法使用provisioner
或绑定特定实例中的角色。
resource "aws_instance" "foo" {
ami = "ami-408c7f28"
instance_type = "t1.micro"
user_data = "**your script**"
}