我正在嘗試使用Packer和Ansible構建AWS AMI來配置我的AMI。我被困在能夠使用Ansible將一些本地文件複製到我最近創建的EC2實例。我正在使用Ansible中的copy
模塊來執行此操作。這裏是我的Ansible代碼如下所示:使用Ansible將本地文件複製到遠程AWS EC2實例
- name: Testing copy of the local remote file
copy:
src: /tmp/test.test
dest: /tmp
這是我得到的錯誤:
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."}
我已經驗證該文件存在/tmp/test.test
從Ansible運行我的本地機器上。
對於我的主文件,我只有localhost
,因爲打包者告訴Ansible它需要知道在哪裏運行Ansible命令。
我不知道該從哪裏走,或者如何正確調試這個錯誤,所以我希望有一點幫助。
這裏是我的帕克腳本如下:
{
"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
@techraf不是100%確定它爲什麼給出這個地址,但我知道那就是EC2實例。我運行了一些其他命令(如用戶創建)來確保我的Ansible腳本實際上是在遠程主機上執行的,而不是在本地主機上執行的。 –
唯一能想到的就是Packer只是將我的Ansible腳本推送到新鑄造的EC2實例,然後運行它。在這種情況下,這個文件移動當然會失敗,因爲它不存在。儘管如此,我並不是100%確定的,因爲我不完全確定這是如何工作的。 –