如何正确配置 Ansible 以连接到 Amazon Web Services

管理可扩展和缩小的 AWS 资源会遇到静态库存主机文件的限制,这就是我们需要动态的原因。这就是动态库存的用途。开始吧:

将这些 ec2.iniec2.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.pyec2.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"
}