如何正确配置 Ansible 以连接到 Amazon Web Services
管理可扩展和缩小的 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 和 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
mv ec2.py inventory/ec2.py
mv ec2.ini inventory/ec2.ini
mv hosts inventory/hosts
接下来,我们应该通过在名为 ansible.cfg
的项目文件夹中创建 Ansible 配置文件并添加以下内容来为 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"
}