如何使用Knife指定加密EBS卷?含报错排查与命令示例
如何用Knife指定加密EBS卷并解决参数报错问题
没问题,你完全可以通过Knife启动使用加密EBS卷的实例——哪怕你的自定义AMI基于非加密的gp2快照。你遇到的ERROR: --ebs-encrypted option requires valid --ebs-size to be specified报错看起来有点矛盾,明明命令里已经加了--ebs-size 30却还是触发提示,大概率是参数顺序或者老版本knife-ec2 gem的解析bug导致的,下面给你几个可行的解决方案:
方案1:调整卷相关参数的顺序
在你使用的knife-ec2 0.15.x/0.16.x版本中,--ebs-encrypted需要和--ebs-size这类卷属性参数放在一起,最好紧跟在AMI参数之后,让Knife能正确关联这些配置。修改后的命令如下:
knife ec2 server create -I ami-c1c03dbc --ebs-size 30 --ebs-encrypted -f t2.small -S chef -i /Users/admin/chef --ssh-user chef --subnet subnet-c613cacb --json-attributes '{"policy_name": "webserver", "policy_group": "qa_aws"}' -N webserver03 -g "sg-a70c5bc4" --region us-east-1 --server-connect-attribute private_ip_address --bootstrap-template /.chef/bootstrap/bootstrap_qa.erb --availability-zone us-east-1e
方案2:显式指定EBS卷类型
因为你的AMI是基于gp2快照创建的,显式加上--ebs-type gp2可以消除Knife在解析卷配置时的歧义,避免误判参数缺失:
knife ec2 server create -I ami-c1c03dbc --ebs-size 30 --ebs-type gp2 --ebs-encrypted -f t2.small -S chef -i /Users/admin/chef --ssh-user chef --subnet subnet-c613cacb --json-attributes '{"policy_name": "webserver", "policy_group": "qa_aws"}' -N webserver03 -g "sg-a70c5bc4" --region us-east-1 --server-connect-attribute private_ip_address --bootstrap-template /.chef/bootstrap/bootstrap_qa.erb --availability-zone us-east-1e
方案3:升级knife-ec2 gem版本
你当前使用的0.15.0/0.16.0版本比较老旧,后续的版本已经修复了不少参数解析的问题。考虑到你的Chef版本是13.3.42,推荐升级到兼容的0.20.x系列版本:
gem install knife-ec2 -v 0.20.0
升级后再执行你原来的命令,应该就能正常触发EBS卷加密了。
额外说明
当你基于非加密快照创建加密EBS卷时,AWS会在实例启动过程中自动完成快照数据的加密写入,这个流程Knife是可以正确触发的,只要卷配置参数被正确解析就没问题。
内容的提问来源于stack exchange,提问作者TyMac
相关产品推荐
相关产品推荐

