Amazon web services 使用Ansible将本地文件复制到远程AWS EC2实例

Amazon web services 使用Ansible将本地文件复制到远程AWS EC2实例,amazon-web-services,amazon-ec2,ansible,packer,Amazon Web Services,Amazon Ec2,Ansible,Packer,我正在尝试使用Packer和Ansible构建一个AWS AMI来提供我的AMI。我无法使用Ansible将一些本地文件复制到我新开发的EC2实例。我正在使用Ansible中的copy模块来执行此操作。下面是我的Ansible代码的样子: - name: Testing copy of the local remote file copy: src: /tmp/test.test dest: /tmp { "variables": {

我正在尝试使用Packer和Ansible构建一个AWS AMI来提供我的AMI。我无法使用Ansible将一些本地文件复制到我新开发的EC2实例。我正在使用Ansible中的
copy
模块来执行此操作。下面是我的Ansible代码的样子:

    - name: Testing copy of the local remote file
      copy:
        src: /tmp/test.test
        dest: /tmp
  {
  "variables": {
    "aws_access_key": "{{env `access_key`}}",
    "aws_secret_key": "{{env `secret_key`}}"
  },
  "builders": [{
    "type": "amazon-ebs",
    "access_key": "{{user `aws_access_key`}}",
    "secret_key": "{{user `aws_secret_key`}}",
    "region": "us-east-1",
    "source_ami": "ami-116d857a",
    "instance_type": "t2.micro",
    "ssh_username": "admin",
    "ami_name": "generic_jenkins_image",
    "ami_description": "Testing AMI building with Packer",
    "vpc_id": "xxxxxxxx",
    "subnet_id": "xxxxxxxx",
    "associate_public_ip_address": "true",
    "tags": {"Environment" : "Dev", "Product": "SharedOperations"}
  }],
  "provisioners": [
    {
      "type": "shell",
      "inline": [
        "sleep 30",
        "sudo rm -f /var/lib/dpkg/lock",
        "sudo apt-get update -y --fix-missing",
        "sudo apt-get -y install libpq-dev python-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev libffi-dev gcc build-essential python-pip",
        "sudo pip install ansible"
      ]
    },
    {
      "type": "ansible-local",
      "playbook_file": "ansible/main.yml"
    }
  ]
}
下面是我得到的错误:

 amazon-ebs: TASK [Testing copy of the local remote file] ***********************************

 amazon-ebs: fatal: [127.0.0.1]: FAILED! => {"changed": false, "failed": true, "msg": "Unable to find '/tmp/test.test' in expected paths."}
我已验证运行Ansible的本地计算机上是否存在文件
/tmp/test.test

对于我的主机文件,我只有
localhost
,因为packer告诉Ansible它需要知道的关于在哪里运行Ansible命令的一切

我不知道从这里到哪里去,也不知道如何正确地调试这个错误,所以我希望能得到一些帮助

下面是我的打包脚本的样子:

    - name: Testing copy of the local remote file
      copy:
        src: /tmp/test.test
        dest: /tmp
  {
  "variables": {
    "aws_access_key": "{{env `access_key`}}",
    "aws_secret_key": "{{env `secret_key`}}"
  },
  "builders": [{
    "type": "amazon-ebs",
    "access_key": "{{user `aws_access_key`}}",
    "secret_key": "{{user `aws_secret_key`}}",
    "region": "us-east-1",
    "source_ami": "ami-116d857a",
    "instance_type": "t2.micro",
    "ssh_username": "admin",
    "ami_name": "generic_jenkins_image",
    "ami_description": "Testing AMI building with Packer",
    "vpc_id": "xxxxxxxx",
    "subnet_id": "xxxxxxxx",
    "associate_public_ip_address": "true",
    "tags": {"Environment" : "Dev", "Product": "SharedOperations"}
  }],
  "provisioners": [
    {
      "type": "shell",
      "inline": [
        "sleep 30",
        "sudo rm -f /var/lib/dpkg/lock",
        "sudo apt-get update -y --fix-missing",
        "sudo apt-get -y install libpq-dev python-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev libffi-dev gcc build-essential python-pip",
        "sudo pip install ansible"
      ]
    },
    {
      "type": "ansible-local",
      "playbook_file": "ansible/main.yml"
    }
  ]
}
这是我的整个Ansible文件:

---
- hosts: all
  sudo: yes
  tasks:
    - name: Testing copy of the local remote file
      copy:
        src: /tmp/test.test
        dest: /tmp
您使用的是直接在目标上运行剧本的方法(“本地”在HashiCorp的产品中,如Vagrant,Packet用于描述配置机器的观点)

目标没有
/tmp/test.test
文件,因此会出现错误


实际上,您希望使用常规的运行playbook。

@techraf无法100%确定它为什么给出该地址,但我知道这是EC2实例。我已经运行了一些其他命令(如用户创建),以确保我的Ansible脚本实际上是在远程主机而不是本地主机上执行的。我唯一能想到的是Packer只是将我的Ansible脚本推出到新创建的EC2实例,然后运行它。在这种情况下,文件移动当然会失败,因为它不存在。不过,我不是100%肯定,因为我不完全确定这在幕后是如何运作的。在你指出了明显的
127.0.0.1
地址后,我突然明白了这一点。我猜我想使用供应器。。。谢谢