當您管理現有的Amazon Web Service (AWS) EC2實例時,點選管理控制台是可以正常工作的。但隨著基礎架構的擴大,管理實例將花費大量時間並變得複雜。是否有更好的方法來管理實例呢?是的!AWS Ansible EC2模組可以幫助您。
在本教程中,您將學習如何使用Ansible AWS EC2模組以示例驅動的方式強大地管理AWS EC2實例。
繼續閱讀並開始吧!
先決條件
本教程包含逐步指示。如果您想跟著進行,請確保您擁有以下條件:
- 一個Ansible控制主機 – 本教程使用在Ubuntu 20.04.3 LTS機器上的Ansible v2.11.7。
- A remote Linux computer to test out the amazon.aws.ec2_instance Ansible module. This tutorial uses Ubuntu 20.04.3 LTS as the remote node.
- 一個AWS帳戶。
- 一個 AWS IAM 使用者,使用一個訪問金鑰ID和密鑰在您的本機上設定,以便可以創建和管理 EC2 實例。本教程將使用一個名為 ec2user 的 IAM 使用者。
請確保 IAM 使用者已設定為可編程訪問,並將其分配給 AmazonEC2FullAccess 策略。
- 配置了一個清單文件和一個或多個主機來運行 Ansible 命令和 Playbooks。遠程 Linux 電腦名為myserver,本教程使用名為web的清單組。
- 在您的 Ansible 控制主機和遠程節點機器上安裝了 Python v3.6 或更高版本。本教程在一台 Ubuntu 機器上使用 Python v3.8.10。
- Python 模組 boto3 版本需大於 1.15.0,botocore 版本需大於 1.18.0,應安裝於 Ansible 控制器主機和遠端節點機器。
使用即興命令創建或重新啟動 EC2 實例
如果您計劃在 AWS 帳戶上創建或重新啟動單個 EC2 實例,運行即興命令就足夠了。即興命令是以快速高效的方式運行單個命令以創建 EC2 實例或修改 AWS EC2 實例的實例類型的方法。
登錄到您的 Ansible 控制器,運行以下 ansible
命令以連接 (-m amazon.aws.ec2_instance
) 到主機 (web
)。
該命令傳遞一個引數 (-a
),告訴 Ansible 使用 instance_tags=Name=Tag1
) 在 us-east-2
區域重新啟動 AWS EC2 實例。為了驗證對 AWS 帳戶的連接,您在即興命令中添加 aws_access_key
和 aws_secret_key
的詳細信息。
該教程在 us-east-2 區域執行所有操作,但您可以在任何您選擇的 AWS 區域執行相同的操作。
一旦命令完成,您將看到一條CHANGED消息,如下所示,確認 Ansible 成功重新啟動了 AWS EC2 實例。

使用Ansible Playbook启动EC2实例
您刚刚学习了如何执行Ansible的即时命令,这对于一次性操作非常有用!但是,也许您需要执行多个任务。如果是这样,创建一个Ansible Playbook来启动一个EC2实例以运行多个任务。
1. 在Ansible控制器主机上打开终端,然后运行以下命令来创建一个名为~/ansible_aws_ec2_module
的目录,并切换到该目录。
该目录将包含您用于调用Ansible AWS EC2模块的playbook和所有必需的配置文件。
2. 接下来,打开您喜欢的文本编辑器,在~/ansible_aws_ec2_module目录中创建一个名为main.yml的文件。使用下面的YAML playbook内容填充main.yml文件。
下面的playbook包含一个任务,该任务在AWS帐户中的特定VPC中启动具有公共IP地址的实例。
从本教程开始,使用您自己的
aws_access_key
和aws_secret_key
值替换。
3. 執行以下命令來調用 playbook (main.yml
)。然後 playbook 執行任務以在 us-east-2
區域創建一個新實例,實例類型為 t2.micro。
下面,您可以看到一些任務顯示為 changed 狀態,這表明 Ansible 成功創建了實例並將任務的狀態修改為運行該命令。相反,您會看到一個 ok 狀態,因為一些任務不需要更改。

4. 現在,打開您喜歡的網絡瀏覽器,並登錄到 AWS 管理控制台。
5. 最後,點擊控制台頂部的搜索欄,搜索 EC2,並點擊 EC2 選項。這樣做將重定向您的瀏覽器到 EC2 頁面。

在 EC2 頁面上,您將看到剛剛創建的實例,如下所示。

停止多個 AWS EC2 實例
也许一些AWS EC2实例不再有用。如果是这样,您可以通过执行Ansible playbook来停止或终止多个实例。在任务中指定实例ID并声明值,以设置Ansible EC2 AWS模块在停止实例方面的行为。
1. 创建一个名为stop.yml的Ansible playbook,并将下面的代码复制/粘贴到playbook中。
下面的playbook会停止两个实例(i-0d8c7eb4eb2c643a1和i-0dbc17a67c0f7577c)。
如果您希望终止实例而不是停止它们,将
state
值更改为absent
。
2. 现在运行下面的命令执行playbook(stop.yml
),它将停止playbook中指定的实例。 ansible-playbook stop.yml

3. 最后,在您的Web浏览器中导航到AWS实例,您将看到成功停止的两个实例,如下所示。

创建具有标签、卷和Cloud Watch监控的实例
也许您需要使用更高级的组件来配置您的实例,例如标记、使用云监控警报进行监视,以及为存储目的创建卷。在这种情况下,使用Ansible EC2 AWS模块在playbook中会很方便。
标记是组织AWS资源并在AWS管理控制台中进行有效资源成本计算的绝佳方法。
1. 创建一个名为advanced.yml的新Ansible playbook,并填充以下代码。
下面的playbook将使用(volumes
—> /dev/sdb
)启动一个带有监视和标记为Instance1
的AWS EC2实例。
2. 现在运行以下命令执行playbook(advanced.yml
),将启动一个带有标记、卷和云监控的AWS EC2实例。 ansible-playbook advanced.yml

3. 到 AWS EC2 控制台中要驗證的實例的儲存選項卡。在區塊裝置下,點擊列表中的一個卷ID以查看實例的詳細信息。

4. 最後,在實例摘要信息頁面中點擊標籤選項卡。您將看到在 playbook 中為實例設置的標籤(步驟一中),如下所示。

結論
在本教程中,您利用了 Ansible AWS EC2 模組來管理 AWS EC2 實例,只需一個命令即可。您還學會了如何調整 AWS EC2 實例,例如重新啟動、終止、添加標籤等。
既然您已經對 Ansible AWS EC2 模組有了扎實的知識,是否願意將 Ansible EC2 AWS 模組納入您的實例管理例行程序中呢?也許您想通過添加一個 cron 任務來自動執行此任務?