您的帖子中有几个问题。我将尝试将它们总结为三项:
- 是否仍然可以在 EC2 Classic(无 VPC)中启动实例?
- 如何使用 Ansible 创建新的 EC2 实例?
- 如何启动动态清单文件
ec2.py
?
1.EC2经典版
您的选项会有所不同,具体取决于您创建 AWS 账户的时间、实例类型和使用的 AMI 虚拟化类型。参考文献:亚马逊账户 http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html,实例类型 http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html#t2-instances-vpc-support.
如果上述参数均不限制 EC2 classic 的使用,您应该能够在不定义任何 VPC 的情况下创建新实例。
2. 使用 Ansible 创建新的 EC2 实例
由于您的实例尚不存在动态清单文件(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 注册为 ansible 主机变量ec2hosts
IE。就像您已在清单文件中定义它一样。如果您想配置刚刚创建的实例,只需添加一个新的 Play 即可,这非常有用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 主机密钥。
Note:boto 需要安装在运行上述 ansible 命令的机器上。
3.使用ansible的ec2动态库存
EC2动态清单由2个文件组成,ec2.py
and ec2.ini
。就您的具体情况而言,我认为您的问题是由于以下事实:ec2.py
无法定位ec2.ini
file.
要解决您的问题,请复制ec2.py
and 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
对于安塞波 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 格式的主机列表打印到标准输出。