作者 | Vivek Gite
譯者 | qianghaohao
我想使用 Ansible 工具建立 Amazon EC2 金鑰對。不想使用 AWS CLI 來建立。可以使用 Ansible 來建立 AWS ec2 金鑰嗎?
你需要使用 Ansible 的 ec2_key 模組。這個模組依賴於 python-boto 2.5 版本或者更高版本。 boto 是亞馬遜 Web 服務的一個 Python API。你可以將 boto 用於 Amazon S3、Amazon EC2 等其他服務。簡而言之,你需要安裝 Ansible 和 boto 模組。我們一起來看下如何安裝 boto 並結合 Ansible 使用。
第一步 – 在 Ubuntu 上安裝最新版本的 Ansible
你必須給你的系統配置 PPA 來安裝最新版的 Ansible[1]。為了管理你從各種 PPA(Personal Package Archives)安裝軟體的倉庫,你可以上傳 Ubuntu 原始碼包並編譯,然後透過 Launchpad 以 apt 倉庫的形式釋出。鍵入如下命令 apt-get 命令[2]或者 apt 命令[3]:
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install software-properties-common
接下來給你的系統的軟體源中新增 ppa:ansible/ansible
。
$ sudo apt-add-repository ppa:ansible/ansible
更新你的倉庫並安裝 Ansible:
$ sudo apt update
$ sudo apt install ansible
安裝 boto:
$ pip3 install boto3
關於在CentOS/RHEL 7.x上安裝 Ansible 的註意事項
你需要在 CentOS 和 RHEL 7.x 上配置 EPEL 源[4]和 yum命令[5]
$ cd /tmp
$ wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ ls *.rpm
$ sudo yum install epel-release-latest-7.noarch.rpm
$ sudo yum install ansible
安裝 boto:
$ pip install boto3
第二步 2 – 配置 boto
你需要配置 AWS credentials/API 金鑰。參考 “AWS Security Credentials[6]” 檔案如何建立 API key。用 mkdir
命令建立一個名為 ~/.aws
的目錄,然後配置 API key:
$ mkdir -pv ~/.aws/
$ vi ~/.aws/credentials
[default]
aws_access_key_id = YOUR-ACCESS-KEY-HERE
aws_secret_access_key = YOUR-SECRET-ACCESS-KEY-HERE
還需要配置預設 AWS 區域[7]:
$ vi ~/.aws/config
輸出樣例如下:
[default]
region = us-west-1
透過建立一個簡單的名為 test-boto.py
的 Python 程式來測試你的 boto 配置是否正確:
#!/usr/bin/python3
# A simple program to test boto and print s3 bucket names
import boto3
t = boto3.resource('s3')
for b in t.buckets.all():
print(b.name)
按下麵方式來執行該程式:
$ python3 test-boto.py
輸出樣例:
nixcraft-images
nixcraft-backups-cbz
nixcraft-backups-forum
上面輸出可以確定 Python-boto 可以使用 AWS API 正常工作。
步驟 3 – 使用 Ansible 建立 AWS ec2 金鑰
建立一個名為 ec2.key.yml
的劇本,如下所示:
---
- hosts: local
connection: local
gather_facts: no
tasks:
- name: Create a new EC2 key
ec2_key:
name: nixcraft-key
region: us-west-1
register: ec2_key_result
- name: Save private key
copy: content="{{ ec2_key_result.key.private_key }}" dest="./aws.nixcraft.pem" mode=0600
when: ec2_key_result.changed
其中,
ec2_key:
– ec2 金鑰對。name: nixcraft_key
– 金鑰對的名稱。region: us-west-1
– 使用的 AWS 區域。register: ec2_key_result
– 儲存生成的金鑰到 ec2keyresult 變數。copy: content="{{ ec2_key_result.key.private_key }}" dest="./aws.nixcraft.pem" mode=0600
– 將 ec2_key_result.key.private_key
的內容儲存到當前目錄的一個名為 aws.nixcraft.pem
的檔案中。設定該檔案的許可權為 0600
(unix 檔案許可權)。when: ec2_key_result.changed
– 僅僅在 ec2_key_result
改變時才儲存。我們不想改寫你的金鑰檔案。你還必須建立如下 hosts
檔案:
[local]
localhost
如下執行你的劇本:
$ ansible-playbook -i hosts ec2.key.yml
最後你應該有一個名為 `aws.nixcraft.pem 私鑰,該私鑰可以和 AWS EC2 一起使用。使用 cat 命令[8]檢視你的金鑰:
$ cat aws.nixcraft.pem
如果你有 EC2 虛擬機器,請按如下方式使用:
$ ssh -i aws.nixcraft.pem user@ec2-vm-dns-name
檢視有關 python 資料結構變數名的資訊,比如 ec2keyresult.changed 和 ec2keyresult.key.private_key
你一定在想我是如何使用變數名的,比如 ec2_key_result.changed
和 ec2_key_result.key.private_key
。它們在哪裡定義過嗎?變數的值是透過 API 呼叫傳回的。簡單地使用 -v
選項執行 ansible-playbook
命令來檢視這樣的資訊:
$ ansible-playbook -v -i hosts ec2.key.yml
我該如何刪除一個金鑰?
使用如下 ec2-key-delete.yml
:
---
- hosts: local
connection: local
gather_facts: no
tasks:
- name: Delete a EC2 key
ec2_key:
name: nixcraft-key
region: us-west-1
# absent means delete keypair
state: absent
按照如下方式執行:
$ ansible-playbook -i hosts ec2-key-delete.yml
關於作者
作者是 nixCraft 的創始人,是一個經驗豐富的系統管理員,DevOps 工程師,同時是一個 Linux 作業系統/Unix shell 指令碼培訓師。透過 RSS/XML 提要[9]或每週郵件簡訊[10]獲得關於系統管理,Linux/Unix和開放原始碼主題的最新教程。
via: https://www.cyberciti.biz/faq/how-to-create-aws-ec2-key-using-ansible/
作者:Vivek Gite[12] 譯者:qianghaohao 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出