ansible 如何正确配置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 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"
}