使用Chef配置在AWS中创建负载均衡器

时间:2015-06-02 16:19:15

标签: amazon-web-services chef chef-recipe

我正在尝试在AWS中创建负载均衡器。我已经创建了机器,机器的节点文件在我的节点文件夹中。我一直收到一个错误,要求我输入机器的实例ID。我认为使用厨师配置的重点是能够使用机器的名称来使用它,而不必使用它的实例ID。我的代码如下:

require 'chef/provisioning'  # driver for creating machines

provisioner = get_setting("CHEF_PROFILE", "abcd-environments")

require "chef/provisioning/aws_driver"

with_driver "aws:abcd-environments"

load_balancer 'test-elb-from-prov' do

  driver "aws:abcd-environments"
  machines ['webappsadm001.da.abcd']
  load_balancer_options   availability_zones: ['us-east-1b'],
  listeners: [{
    # required
    protocol: :http,
    # required
    port: 80,
    instance_protocol: :http,
    # required
    instance_port: 10262,
    }],
  subnets: ['subnet-37ce3a1c'],

    health_check:
    [{
      target: "TCP:10262",
      interval: 30,
      timeout: 5,
      unhealthy_threshold: 2,
      healthy_threshold: 10
    }]

end

日志如下:

 ================================================================================
    Error executing action `create` on resource 'load_balancer[test-elb-from-prov]'
    ================================================================================

    AWS::Core::OptionGrammar::FormatError
    -------------------------------------
    expected string value for key instance_id of member 1 of option instances

2 个答案:

答案 0 :(得分:0)

如果计算机是节点文件夹中的现有节点,那么您应该能够为该现有计算机定义资源,其中包含action:nothing,然后参考该节点。

因此,如果节点名称是' myinstance',则配方看起来像:

machine 'myinstance' do
  action :nothing
end

load_balancer 'my_load_balancer' do
  machines ['myinstance']
end

答案 1 :(得分:0)

所以我想出了问题所在。我使用aws雾驱动器通过另一本食谱创建了机器。

然后我尝试将负载平衡器连接到机器上。当它试图查看节点的JSON文件时,它的格式不同,并且出错。

我删除了机器并运行了食谱。这使用aws驱动程序创建了机器,并且按预期创建并附加了负载均衡器。