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