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