我对如何使用Ansible启动EC2实例感到非常困惑。
我正在尝试使用ec2.py库存脚本。我不确定应该使用哪一个,因为Ansible安装了三个:
我认为在库存/中运行一个最有意义,所以我使用以下命令运行它:
ansible-playbook launch-ec2.yaml -i ec2.py
这给了我:
msg: Either region or ec2_url must be specified
所以我添加了一个区域(即使我指定了vpc_subnet_id),我得到:
msg: Region us-east-1e does not seem to be available for aws module boto.ec2. If the region definitely exists, you may need to upgrade boto or extend with endpoints_path
我认为Amazon必须最近更改了ec2,因此您需要使用VPC?即使当我尝试从Amazon控制台启动实例时,“ EC2 Classic”选项也被禁用。
当我尝试在cloud / amazon /中使用ec2.py脚本时,我得到:
ERROR: Inventory script (/software/ansible/lib/ansible/modules/core/cloud/amazon/ec2.py) had an execution error:
没有比这更多的细节了。
搜索后,我发现/ module_utils中的ec2.py模块已更改,因此不需要指定区域。我尝试运行此文件,但得到:
错误:文件/software/ansible/lib/ansible/module_utils/ec2.py被标记为可执行文件,但无法正确执行。如果不应将其视为可执行脚本,请使用进行更正chmod -x /software/ansible/lib/ansible/module_utils/ec2.py
。
因此,正如错误所提示的,我删除了ec2.py文件的可执行权限,但是随后出现以下错误:
ERROR: /software/ansible/lib/ansible/module_utils/ec2.py:30: Invalid ini entry: distutils.version - need more than 1 value to unpack
有谁对如何使它起作用有任何想法吗?什么是正确的文件?在这一点上,我完全迷失了如何使它工作。
您的帖子中有几个问题。我将尝试在三个项目中对它们进行总结:
ec2.py
?根据您何时创建AWS账户,实例类型和使用的AMI虚拟化类型,您的选择会有所不同。参考:aws account,实例类型。
如果以上参数均未限制EC2 classic的使用,则您应该能够在不定义任何VPC的情况下创建新实例。
由于您的实例不存在,因此动态清单文件(ec2.py
)无效。尝试指示ansible在您的本地计算机上运行。
创建一个新的清单文件,例如,new_hosts
具有以下内容:
[localhost]
127.0.0.1
然后,您的剧本(例如)create_instance.yml
应使用本地连接和hosts: localhost
。请参阅以下示例:
--- # Create ec2 instance playbook
- hosts: localhost
connection: local
gather_facts: false
vars_prompt:
inst_name: "What's the name of the instance?"
vars:
keypair: "your_keypair"
instance_type: "m1.small"
image: "ami-xxxyyyy"
group: "your_group"
region: "us-west-2"
tasks:
- name: make one instance
ec2: image={{ image }}
instance_type={{ instance_type }}
keypair={{ keypair }}
instance_tags='{"Name":"{{ inst_name }}"}'
region={{ region }}
group={{ group }}
wait=true
register: ec2_info
- name: Add instances to host group
add_host: hostname={{ item.public_ip }} groupname=ec2hosts
with_items: ec2_info.instances
- name: Wait for SSH to come up
wait_for: host={{ item.public_dns_name }} port=22 delay=60 timeout=320 state=started
with_items: ec2_info.instances
该过程将创建一个EC2实例,并将其公共IP注册为可访问的主机变量,ec2hosts
即。就像您在清单文件中定义它一样。如果您要设置刚刚创建的实例,只需添加一个新的角色,这将很有用hosts: ec2hosts
。
最终,按以下方式启动ansible:
export ANSIBLE_HOST_KEY_CHECKING=false
export AWS_ACCESS_KEY=<your aws access key here>
export AWS_SECRET_KEY=<your aws secret key here>
ansible-playbook -i new_hosts create_instance.yml
环境变量的目的ANSIBLE_HOST_KEY_CHECKING=false
是避免在连接到实例时提示您添加ssh主机密钥。
注意:需要在运行上述ansible命令的计算机上安装boto。
EC2动态清单由2个文件ec2.py
和组成ec2.ini
。在您的特定情况下,我认为您的问题是由于ec2.py
无法找到ec2.ini
文件。
要解决您的问题,请复制ec2.py
并复制ec2.ini
到要运行ansible的计算机上的同一文件夹,例如/etc/ansible/
。
Pre Ansible 2.0发行版(相应地更改分支)。
cd /etc/ansible
wget https://raw.githubusercontent.com/ansible/ansible/stable-1.9/plugins/inventory/ec2.py
wget https://raw.githubusercontent.com/ansible/ansible/stabe-1.9/plugins/inventory/ec2.ini
chmod u+x ec2.py
对于Ansible 2:
cd /etc/ansible
wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.py
wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.ini
chmod u+x ec2.py
配置ec2.ini
并运行ec2.py
,这应该将ini格式的主机列表打印到stdout。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句