Amazon web services 打包机EC2\U HOME:未设置EC2\U AMITOOL\U HOME或EC2\U HOME环境变量

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

我使用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_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命令
    是您需要覆盖的部分。另请参见: