在Autoscaling配置实例上使用chef执行配方

时间:2017-05-03 13:27:59

标签: amazon-web-services chef autoscaling terraform aws-opsworks

我有一个terraform配置的AWS结构。我已准备好厨师执行配方,但问题是实例没有任何node_name属性,因为Terraform使用AutoScaling Groupchef client安装了user_data。 {1}}脚本。节点名称由chef生成,我需要在每个实例上最初执行一些安装。我尝试创建base角色并使用所需操作将其更新到服务器。更新成功但未在实例上启动任何安装。有没有办法运行命令或为每个新到达的实例分配一个角色?

2 个答案:

答案 0 :(得分:2)

我能想到两种解决方案:

  1. 将您要加载的脚本添加到aws_instance
  2. user_data 属性中的EC2

    例如:

    resource "aws_instance" "foo" {
      ami           = "ami-408c7f28"
      instance_type = "t1.micro"
      user_data = "**your script**"
    }
    
    1. 从您自己的自定义AMI启动它们。

答案 1 :(得分:0)

感谢您的回答。自定义AMI不是一个选项,所以我不得不研究不同的方法。事实证明,您可以跳过chef-service-manager部分并直接致电chef client。重点是您可以将JSON文件作为参数分配给chef clientJSON可以包含可以分配给新实例的runlist和/或role,即使它是由Autoscaling group创建的。由于我已经在使用user_data,我刚刚在脚本中添加了JSON创建,并分配了runlist中已有Chef Server的所需角色。这两个答案帮助我实现了目标。现在,在每个新实例上,通过user_data我创建一个带有角色的JSON,最后我运行chef client -f role_config.json,之后我调用服务创建chef-service-manager。这只是一个补丁,因为最好的选择不是将其创建为服务而是使用scheduled task并且每次都调用json,因为如果它是第二次为同一个实例调用它在将来的处决中将被忽视。另外,根据我在Chef文档中的介绍,scheduled task将是比使用该服务更好的选择。谢谢你的回答!