I use packer to build Amazon AMI and I ran into the issue that:
- The base AMI (
ami-a4bdd194
) does not haveec2-ami-tools
install so I wrote a small script to install it using provisions attribute. - It installed successfully to
/usr/local/bin
but I still get following errors when building the the AMI.
Any help would be very appreciate! Thanks!
// Console Error log
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