【发布时间】:2015-10-07 03:48:48
【问题描述】:
在初始引导的 chef-client 运行期间,我使用 Chef provided AWS cookbook (v2.7.2) 在 Ubuntu Server 14.04.02 LTS HVM ec2 实例上创建和附加 EBS 卷。我正在托管自己的厨师服务器(12.1.0-1_amd64)。使用 Knife-ec2,我创建了 aws 实例并通过以下命令引导运行列表:
knife ec2 server create --region us-east-1 --availability-zone us-east-1a --node-name my-server --run-list "role[my-role]" --image ami-d05e75b8 --flavor c3.large --ebs-size 16 --ebs-volume-type gp2 --subnet subnet-mySubnetId --associate-public-ip --server-connect-attribute public_ip_address --ssh-user ubuntu --ssh-key my-pem --identity-file /path/to/my-pem.pem -y
但是,当执行创建并附加卷的配方时,卷成功创建,但无法附加到我的实例。不断出现以下错误:
Aws::EC2::Errors::InvalidInstanceIDNotFound: The instance ID 'i-36a93b84' does not exist
以下代码在我的食谱中(取自食谱页面上的示例):
include_recipe 'aws'
aws_ebs_volume "backup_volume" do
aws_access_key aws['aws_access_key_id']
aws_secret_access_key aws['aws_secret_access_key']
size 16
device "/dev/sdi"
availability_zone "us-east-1a"
action [ :create, :attach ]
end
我验证了“i-36a93b84”是knife-ec2 创建的实例的ID,并且厨师客户端正在执行,所以它确实存在。此外,我验证了我在与实例相同的可用区中创建卷。
我已经阅读了一些关于 AWS's Eventual Consistency 的帖子,但不知道如何在引导的 chef-client 运行期间处理这个问题,因为配方在创建实例后立即运行。
有没有办法在 knife-ec2 创建 aws 服务器时创建一个额外的挂载,还是我试图以非正统的方式附加一个卷?
菜谱中的主厨客户输出:
食谱:my-cookbook::backupvolume * aws_ebs_volume[backup_volume] 操作创建 [2015-07-17T11:57:05+00:00] 信息:处理 aws_ebs_volume[backup_volume] 操作创建(my-cookbook::backupvolume 第 49 行) [2015-07-17T11:57:05+00:00] 调试:在节点上启用的通用 aws_ebs_volume 资源的提供者包括:[来自食谱 aws 的 LWRP 提供者 aws_ebs_volume] [2015-07-17T11:57:05+00:00] 调试:在资源 aws_ebs_volume [backup_volume] 上创建操作的提供程序是来自食谱 aws 的 LWRP 提供程序 aws_ebs_volume [2015-07-17T11:57:05+00:00] 调试:实例 ID 为 i-36a93b84 [2015-07-17T11:57:05+00:00] 调试:实例的可用区是 us-east-1a [2015-07-17T11:57:05+00:00] 调试:创建新卷 vol-4842ecc4 [2015-07-17T11:57:05+00:00] 调试:正在创建卷 [2015-07-17T11:57:08+00:00] 信息:卷 vol-4842ecc4 可用 - 创建一个 id= size=16 availability_zone=us-east-1a 的卷,并使用创建的卷的 id 更新节点数据 * aws_ebs_volume[backup_volume] 动作附加 [2015-07-17T11:57:08+00:00] 信息:处理 aws_ebs_volume[backup_volume] 动作附加(my-cookbook::backupvolume 第 49 行) [2015-07-17T11:57:08+00:00] 调试:在节点上启用的通用 aws_ebs_volume 资源的提供者包括:[来自食谱 aws 的 LWRP 提供者 aws_ebs_volume] [2015-07-17T11:57:08+00:00] 调试:资源 aws_ebs_volume [backup_volume] 上的操作附加提供程序是来自食谱 aws 的 LWRP 提供程序 aws_ebs_volume [2015-07-17T11:57:08+00:00] 调试:将 vol-4842ecc4 附加为 /dev/sdi ==================================================== =============================== 在资源“aws_ebs_volume[backup_volume]”上执行操作“attach”时出错 ==================================================== =============================== Aws::EC2::Errors::InvalidInstanceIDNotFound ------------------------------------------ 实例 ID 'i-36a93b84' 不存在 食谱跟踪: --------------- /var/chef/cache/cookbooks/aws/providers/ebs_volume.rb:212:in `attach_volume' /var/chef/cache/cookbooks/aws/providers/ebs_volume.rb:70:in `block (2 levels) in class_from_file' /var/chef/cache/cookbooks/aws/providers/ebs_volume.rb:68:in `block in class_from_file' 资源声明: --------------------- # 在 /var/chef/cache/cookbooks/my-cookbook/recipes/backupvolume.rb 49:aws_ebs_volume“备份卷”做 50: aws_access_key aws['aws_access_key_id'] 51: aws_secret_access_key aws['aws_secret_access_key'] 52:尺寸 16 53: 设备“/dev/sdi” 54:描述“测试备份” 55:可用性区域“us-east-1a” 56:动作[:创建,:附加] 57:结束 58: 编译资源: ------------------ # 在 /var/chef/cache/cookbooks/my-cookbook/recipes/backupvolume.rb:49:in `from_file' 中声明 aws_ebs_volume("backup_volume") 做 动作 [:create, :attach] 更新真实 重试 0 重试延迟 2 default_guard_interpreter :默认 声明类型:aws_ebs_volume 食谱名称“我的食谱” recipe_name "备份卷" aws_access_key "********" aws_secret_access_key "********" 尺寸 16 设备“/dev/sdi” 描述“测试备份” 可用性区域“us-east-1a” 超时 180 卷类型“标准” 点数 0 结尾这是堆栈跟踪:
Aws::EC2::Errors::InvalidInstanceIDNotFound: aws_ebs_volume[backup_volume](my-cookbook::backupvolume 第 49 行)出现错误:Aws::EC2::Errors::InvalidInstanceIDNotFound:实例 ID 'i-36a93b84' 没有存在 /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/aws-sdk-core-2.0.48/lib/seahorse/client/plugins/raise_response_errors.rb:15:in `call' /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/aws-sdk-core-2.0.48/lib/seahorse/client/plugins/param_conversion.rb:22:in `call' /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/aws-sdk-core-2.0.48/lib/aws-sdk-core/plugins/response_paging.rb:10:in `call' /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/aws-sdk-core-2.0.48/lib/seahorse/client/plugins/response_target.rb:18:in `call' /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/aws-sdk-core-2.0.48/lib/seahorse/client/request.rb:70:in `send_request' /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/aws-sdk-core-2.0.48/lib/seahorse/client/base.rb:216:in `block (2 levels) in define_operation_methods ' /var/chef/cache/cookbooks/aws/providers/ebs_volume.rb:212:in `attach_volume' /var/chef/cache/cookbooks/aws/providers/ebs_volume.rb:70:in `block (2 levels) in class_from_file' /opt/chef/embedded/apps/chef/lib/chef/mixin/why_run.rb:52:in `call' /opt/chef/embedded/apps/chef/lib/chef/mixin/why_run.rb:52:in `add_action' /opt/chef/embedded/apps/chef/lib/chef/provider.rb:175:in `converge_by' /var/chef/cache/cookbooks/aws/providers/ebs_volume.rb:68:in `block in class_from_file'【问题讨论】:
-
我测试了让初始 ec2 实例运行几个小时并尝试再次运行配方以创建和附加卷。同样的错误,找不到实例。
标签: amazon-web-services amazon-ec2 chef-infra chef-recipe knife