Amazon web services 打包机EC2\U HOME:未设置EC2\U AMITOOL\U HOME或EC2\U HOME环境变量
我使用packer构建Amazon AMI,遇到以下问题:Amazon web services 打包机EC2\U HOME:未设置EC2\U AMITOOL\U HOME或EC2\U HOME环境变量,amazon-web-services,vagrant,packer,Amazon Web Services,Vagrant,Packer,我使用packer构建Amazon AMI,遇到以下问题: 基本AMI(AMI-a4bdd194)没有ec2 AMI工具安装,因此我编写了一个小脚本,使用provisions属性安装它 它已成功安装到/usr/local/bin,但在构建AMI时仍然出现以下错误 任何帮助都将不胜感激!谢谢 //控制台错误日志 amazon-instance: /usr/local/bin/ec2-bundle-vol: line 3: EC2_HOME: Neither of EC2_AMITOOL_H
AMI-a4bdd194
)没有ec2 AMI工具
安装,因此我编写了一个小脚本,使用provisions属性安装它/usr/local/bin
,但在构建AMI时仍然出现以下错误 amazon-instance: /usr/local/bin/ec2-bundle-vol: line 3: EC2_HOME: Neither of EC2_AMITOOL_HOME or EC2_HOME environment variables are set
amazon-instance:
amazon-instance:
amazon-instance:
amazon-instance:
amazon-instance:
==> amazon-instance: Volume bundling failed. Please see the output above for more
==> amazon-instance: details on what went wrong.
//packer.json
{
"variables": {
"access_key": "",
"secret_key": "",
"x509_cert_path": "",
"x509_key_path": ""
},
"builders": [
{
"access_key": "{{user `access_key`}}",
"secret_key": "{{user `secret_key`}}",
"x509_cert_path": "{{user `x509_cert_path`}}",
"x509_key_path": "{{user `x509_key_path`}}",
"account_id": "123456789012",
"ami_name": "my-packer-example {{timestamp}}",
"instance_type": "i2.xlarge",
"region": "us-west-2",
"s3_bucket": "my_bucket/my_folder",
"source_ami": "ami-a4bdd194",
"ssh_username": "ubuntu",
"type": "amazon-instance"
}
],
"provisioners": [
{
"type": "shell",
"scripts": [
"../tools/install-ec2-ami-tools.bash"
]
}
]
}
//install-ec2-ami-tools.bash
#!/bin/bash
function trimString()
{
echo "${1}" | sed -e 's/^ *//g' -e 's/ *$//g'
}
function isEmptyString()
{
if [[ "$(trimString ${1})" = '' ]]
then
echo 'true'
else
echo 'false'
fi
}
function installEC2AMITools()
{
if [[ "$(isEmptyString ${EC2_HOME})" = 'true' || "$(which 'ec2-bundle-vol')" = '' ]]
then
sleep 10 &&
sudo apt-get update &&
sudo apt-get install -y 'unzip' 'wget' &&
rm -rf 'ec2-ami-tools' &&
rm -f 'ec2-ami-tools.zip' &&
wget -q 'http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.zip' &&
unzip -q 'ec2-ami-tools.zip' &&
mv ec2-ami-tools-* 'ec2-ami-tools' &&
sudo rsync -a --no-o --no-g 'ec2-ami-tools/' '/usr/local' &&
rm -rf 'ec2-ami-tools' &&
rm -f 'ec2-ami-tools.zip'
else
echo -e "\033[1;32mec2-ami-tools has already been installed!\033[0m"
fi
}
function main()
{
installEC2AMITools
}
main
下面是一个有效的配置文件示例。诀窍是覆盖实际命令以包括所需的路径:
{
“变量”:{
“x509证书路径”:“/etc/aws/aws.cert”,
“x509密钥路径”:“/etc/aws/aws.key”,
“环境”:“暂存”
},
“建筑商”:[
{
“类型”:“亚马逊实例”,
“名称”:“厨师服务器-{{user`environment`}”,
“地区”:“欧盟-西部-1”,
“可用区”:“eu-west-1a”,
“来源:ami”:“ami-46ba5331”,
“实例类型”:“m1.medium”,
“ssh_用户名”:“ubuntu”,
“ami_name”:“chef server-{{user`environment`}{{isotime}clean_ami_name}”,
“s3_bucket”:“配置映像”,
“ami_说明”:“厨师服务器实例”,
“账户id”:“xxxx yyyy ZZZ”,
“x509证书路径”:“{user`x509证书路径`}”,
“x509密钥路径”:“{user`x509密钥路径`}”,
“bundle_vol_command”:“sudo-n EC2_HOME=/usr/local EC2 bundle vol--no filter-k{.KeyPath}-u{.AccountId}-c{.CertPath}-r{.Architecture}-e{.PrivatePath}/*-d{.Destination}-p{.Prefix}-batch”,
“bundle_upload_command”:“sudo-n EC2_HOME=/usr/local EC2 upload bundle-b{.BucketName}-m{.ManifestPath}-a{.AccessKey}-s{.SecretKey}-d{.BundleDirectory}-批处理-位置EU-重试”
}
],
“供应者”:[
{
“类型”:“外壳”,
“内联”:[
“sleep 3&&sudo apt get install zip-y>/dev/null”,
“安静http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.zip",
“解压-qq ec2 ami tools.zip”,
“sudo-E rsync-a--no-o--no-g ec2 ami工具-*//usr/local/”,
“sudo apt get install ruby-y>/dev/null”
]
},
{
“类型”:“厨师独奏”,
“执行命令”:“{if.Sudo}}Sudo{{end}}chef solo-E{{user`environment`}--no color-c{.ConfigPath}-j{{.JsonPath}”,
“cookbook_路径”:[“{{pwd}}/lib/cookbooks”],
“数据包路径”:“{pwd}}/./../data\u bags”,
“加密的数据包秘密路径”:“/etc/chef/databags.pem”,
“环境路径”:“{pwd}}/environments”,
“运行列表”:[“配方[chef::server]”,
“json”:{
“openssh”:{
“服务器”:{
“允许用户”:“部署者ubuntu”,
使用“是”:“是”
}
},
“主厨/客户”:{
“配置”:{
“环境”:“{user`environment`}”
}
}
}
}
]
}
谢谢,我说的对吗:“bundle_volu命令”:“sudo-n EC2_HOME=/usr/local EC2 bundle vol--no-filter-k{.KeyPath}-u{.AccountId}-c{.CertPath}-r{.Architecture}-e{.PrivatePath}/*-d{.Destination}-p{.Prefix}--batch”,“bundle{.upload}u命令”:“sudo-n EC2_HOME=/usr/local EC2 upload bundle-b{.BucketName}-m{.ManifestPath}-a{.AccessKey}-s{.SecretKey}-d{.BundleDirectory}--批处理--位置EU--重试”
是的,bundle\u volu命令
和bundle\u upload\u命令
是您需要覆盖的部分。另请参见: