如何获取附加到OpsWorks实例的EBS卷ID?

问题描述 投票:0回答:2

我正在使用OpsWorks来部署一堆应用程序,我想标记实例及其所有相关资源。我正在使用opscode aws cookbook(https://github.com/opscode-cookbooks/aws)标记我的实例,使用以下配方工作正常:

include_recipe 'aws'

custom_tags = node.fetch('aws_tag', {}).fetch('tags', nil)
instance_id = node.fetch('ec2', {}).fetch('instance_id', nil)

unless custom_tags.nil? || custom_tags.empty?
  aws_resource_tag 'tag instance' do
    tags custom_tags
    resource_id instance_id
    action :update
  end
end

我想扩展此配方以标记附加到实例的EBS卷。 aws_resource_tag()可以标记实例,快照和卷,但我需要提供一个要标记的卷列表。

如何将卷ID附加到实例?

amazon-web-services chef aws-opsworks
2个回答
0
投票

我在http://docs.aws.amazon.com/opsworks/latest/userguide/attributes-json-opsworks-instance.html中没有看到任何内容,所以你可能只需要使用标准的ohai数据。连接到机器并运行ohai ec2,您将看到完整的元数据树。


0
投票

首先,您需要了解OpsWorks automatically tag关联的图层或堆栈资源,但​​标签目前无法应用于实例的根或默认EBS卷。

如果您使用OpsWorks for Windows Stack,我建议您从超市安装以下食谱:

文件metadata.rb

depends 'aws', '4.2.2'
depends 'ohai', '4.2.3'
depends 'compat_resource', '12.19.1'

接下来,向您的堆栈添加具有执行list-tags for OpsWorkscreate-tags in the EC2 service所需权限的IAM角色。

最后你可以使用这个食谱add-tags.rb:

Chef::Log.info("******TAGS VOLUME******")
#Chef::Log.level = :debug
instance = search("aws_opsworks_instance", "self:true").first
stack = search("aws_opsworks_stack").first
arnstack = "#{stack['arn']}"
cmd = "aws opsworks list-tags --resource-arn #{arnstack} --region eu-west-1"
Chef::Log.info("****** #{arnstack} ******")
batch  'find_tags' do
  cwd "C:\\Program Files\\Amazon\\AWSCLI"
  code <<-EOH
  #{cmd} > C:\\tmp\\res.json
  EOH
end
if ::File.exist?('C:\\tmp\\res.json')
  myjsonfile = ::File.read('C:\\tmp\\res.json').chomp
  data = JSON.parse("#{myjsonfile}")
  data['Tags'].each do |key, value|
    aws_resource_tag 'Boot Volume' do
        resource_id lazy {instance['root_device_volume_id']}
        tags(key => value)
    end
  end
end

该配方仅将基于堆栈的所有TAG添加到我的实例的根卷。

© www.soinside.com 2019 - 2024. All rights reserved.