管理按比例缩放的AWS资源会遇到静态清单主机文件的限制,这就是为什么我们需要动态的东西。这就是动态库存的用途。开始吧:
将这些文件ec2.ini和ec2.py文件下载到您的项目文件夹中:
cd my_ansible_project wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.py wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.ini
完成后,使ec2.py文件可执行:
chmod +x ec2.py
现在,将您的AWS Secret and Access密钥导出为环境变量:
export AWS_ACCESS_KEY_ID='ABCDEFGHIJKLM' export AWS_SECRET_ACCESS_KEY='NOPQRSTUVWXYZ'
要使用ec2.py脚本,我们需要Python AWS SDK,boto因此您需要安装它:
sudo pip install boto
要测试一切是否良好,请尝试ec2.py通过列出您的资源来执行:
./ec2.py --list
您应该看到类似以下内容:
{ "_meta": { "hostvars": {} } }
现在,我们要使用动态清单以及静态主机文件。首先,创建一个文件夹叫inventory,加ec2.py,ec2.ini和我们的hosts文件,它然后告诉Ansible使用该文件夹作为一个清单文件:
mkdir inventory mvec2.pyinventory/ec2.py mvec2.iniinventory/ec2.ini mv hosts inventory/hosts
接下来,我们应该在项目文件夹中创建一个名为Ansible的配置文件,ansible.cfg并添加以下内容,从而为Ansible定义项目级别的配置:
[defaults] hostfile = inventory [ssh_connection] pipelining = False ssh_args = -o ControlMaster=auto -o ControlPersist=30m -o StrictHostKeyChecking=no
接下来,我们需要配置Ansible使用SSH密钥来验证对我们的EC2实例的访问。使用SSH代理是通过资源进行身份验证的最佳方法,因为这样可以更轻松地管理密钥:
ssh-agent bash ssh-add ~/.ssh/keypair.pem
而已!如果遵循此步骤,则可以使用该ping模块对其进行测试,然后,您将看到已配置为使用键响应pong的正在运行的实例:
ansible -m ping all 11.22.33.44 | success >> { "changed": false, "ping": "pong" }