Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 在自动缩放配置的实例上使用chef执行配方_Amazon Web Services_Chef Infra_Autoscaling_Terraform_Aws Opsworks - Fatal编程技术网

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
角色,并使用所需的操作将其更新到服务器。更新成功,但没有在实例上启动安装。有没有办法运行命令或为每个新到达的实例分配角色?

我可以想到两种解决方案:

  • 将要加载的脚本添加到
  • 例如:

  • 从您自己的自定义AMI启动它们
    您必须在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**"
    }