当您将Ansible与AWS结合使用时,维护清单文件将是一项繁重的任务,因为AWS经常更改IP,自动缩放实例等。但是,有一个简单的解决方案就是ansible动态清单。它基本上是一个Python脚本,当您运行ansible命令时会进行API调用以获取实例信息。这将为您提供动态清单详细信息,这些信息可以用来方便管理AWS基础架构。
设置Ansible AWS动态清单
1.使用pip安装boto库。如果您尚未安装pip,则可以按照此文档进行安装–> 安装python pip
pip install boto
2.将清单脚本下载到/ etc / ansible目录。
Wget https://raw.github.com/ansible/ansible/devel/contrib/inventory/ec2.py
3.使文件可执行。
chmod x ec2.py
4.将ec2.ini文件下载到/ etc / ansible目录。
https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.ini
5. ec2.ini文件具有默认的AWS配置,可通过ec2.py文件读取。因此,请注释掉并配置必要的参数,以免查询时间过长。这样的例子就是“ regions”参数。默认情况下,该值为“ all”。这样可以对所有区域进行API调用。因此,最好只提及您使用的特定aws区域。
在[credentials]部分下,您需要提及abos访问密钥和私钥,以便boto库进行API调用。
或者,您可以在家里创建一个凭证文件,如下所示。
touch ~/.aws/credentials
打开凭证文件,然后如下所示进行输入。
[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
注意:如果您正在使用AWS实例进行此设置,并且具有具有访问AWS服务权限的IAM角色,则无需将访问密钥和秘密密钥添加到凭证文件中
6 现在,使用以下命令测试清单配置。
./ec2.py --list
应该获得如下所示的输出。
{
“ _meta”:{
“ hostvars”:{}
}
}
如果您有一些实例正在运行,则将获得包含所有实例详细信息的输出。
7.如果要将动态清单用作默认的ansible清单,则需要编辑/ etc / ansible目录中存在的ansible.cfg文件,并在ansible.cfg中搜索清单参数。如下所示更改库存参数值。
inventory = /etc/ansible/ec2.py
现在,您可以对动态清单资源运行正常的ansible命令。例如,以下命令将对使用动态清单获取的所有正在运行的ec2实例运行ping命令。
ansible all -m ping