既存のAmazon Web Service (AWS) EC2インスタンスを管理する場合、Management Consoleでのクリック操作はうまく動作します。しかし、インフラストラクチャが成長するにつれて、インスタンスの管理には多くの時間と複雑さが伴います。インスタンスを管理するためのより良い方法はありますか?はい、AWS Ansible EC2モジュールが役立ちます。
このチュートリアルでは、Ansible AWS EC2モジュールが例を使ったアプローチでAWS EC2インスタンスの効果的な管理を提供する方法について学びます。
続けて読んで、始めましょう!
前提条件
このチュートリアルは、ステップバイステップの手順で構成されています。一緒に進める場合は、以下の準備が整っていることを確認してください:
- An 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.
- An AWSアカウント。
- AWS IAMユーザー、アクセスキーID、およびシークレットキーが、ローカルマシンに設定され、EC2インスタンスの作成および管理へのアクセスが可能になっています。このチュートリアルでは、IAMユーザーの名前をec2userとします。
IAMユーザーがプログラマティックアクセス用に設定されており、AmazonEC2FullAccessポリシーが割り当てられていることを確認してください。
- インベントリファイルと1つ以上のホストが構成され、Ansibleコマンドとプレイブックの実行に使用されます。リモート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
コマンドを実行してホスト(web
)に接続します(-m amazon.aws.ec2_instance
)。
コマンドは、us-east-2
リージョンでinstance_tags=Name=Tag1
のAWS EC2インスタンスを再起動するようAnsibleに指示する引数(-a
)を渡します。AWSアカウントへの接続を認証するために、アドホックコマンドにaws_access_key
とaws_secret_key
の詳細を追加します。
チュートリアルではすべての操作をus-east-2リージョンで実行しますが、任意のAWSリージョンで同じ操作を実行できます。
コマンドが完了すると、以下に示すようにCHANGEDメッセージが表示され、AnsibleがAWS EC2インスタンスの再起動に成功したことが確認されます。

EC2インスタンスをAnsible Playbookで起動する
Ansibleのアドホックコマンドの実行方法を学びましたが、一度だけの操作には適しています!しかし、複数のタスクを実行する必要がある場合は、複数のタスクを実行するAnsible Playbookを作成します。
1. Ansibleコントローラーホストのターミナルを開き、次のコマンドを実行して~/ansible_aws_ec2_module
というディレクトリを作成し、そのディレクトリに移動します。
このディレクトリには、Ansible AWS EC2モジュールを呼び出すために使用するplaybookとすべての必要な構成ファイルが含まれます。
2. 次に、お気に入りのテキストエディタを開き、~/ansible_aws_ec2_moduleディレクトリにmain.ymlというファイルを作成します。以下のYAML playbookの内容をmain.ymlファイルに入力します。
以下のプレイブックには、AWSアカウント内の特定のVPCにパブリックIPアドレスを持つインスタンスを起動するタスクが含まれています。
このチュートリアル全体で、
aws_access_key
、aws_secret_key
の値を自分のものに置き換えてください。
3. 以下のコマンドを実行してプレイブック(`main.yml`)を呼び出します。その後、プレイブックは、`us-east-2`リージョンにインスタンスタイプを`t2.micro`として新しいインスタンスを作成するタスクを実行します。
下記のように、いくつかのタスクはchangedステータスを示しており、これはAnsibleがインスタンスを正常に作成し、タスクの状態をコマンドの実行に変更したことを示します。対照的に、いくつかのタスクは変更が必要ないため、okステータスが表示されます。

4. お気に入りのウェブブラウザを開き、AWS管理コンソールにログインします。
5. 最後に、コンソールの上部にある検索バーをクリックし、EC2を検索し、EC2メニューアイテムをクリックします。これにより、ブラウザがEC2ページにリダイレクトされます。

EC2ページでは、以下に示すように新しく作成したインスタンスが表示されます。

複数のAWS EC2インスタンスを停止
おそらく、いくつかのAWS EC2インスタンスはもはや目的を果たしていません。その場合、Ansibleのプレイブックを実行して複数のインスタンスを停止または終了することができます。インスタンスのIDを指定し、タスクでAnsible EC2 AWSモジュールの動作を設定するための値を宣言してください。
1. stop.ymlという名前のAnsibleプレイブックを作成し、以下のコードをプレイブックにコピー/貼り付けてください。
以下のプレイブックは2つのインスタンス(i-0d8c7eb4eb2c643a1とi-0dbc17a67c0f7577c)を停止します。
インスタンスを停止する代わりに終了させたい場合は、
state
の値をabsent
に変更してください。
2. 以下のコマンドを実行してプレイブック(stop.yml
)を実行し、プレイブックで指定したインスタンスを停止します。ansible-playbook stop.yml

3. 最後に、ウェブブラウザでAWSのインスタンスに移動すると、以下のように正常に停止した2つのインスタンスが表示されます。

タグ、ボリューム、およびCloud Watchモニタリングを持つインスタンスの作成
おそらく、タギング、クラウドウォッチアラームでの監視、およびストレージ用のボリュームの作成など、より高度なコンポーネントでインスタンスをプロビジョニングする必要があるかもしれません。その場合、Ansible EC2 AWSモジュールを使ったプレイブックを使用すると便利です。
タグはAWSリソースを整理し、AWS Management Consoleでのリソースの効率的なコスト計算を可能にする優れた方法です。
1. 新しいAnsibleプレイブックをadvanced.ymlという名前で作成し、以下のコードをプレイブックに記述します。
以下のプレイブックは、AWS EC2インスタンスを起動し、(volumes
—> /dev/sdb
、監視、およびInstance1
のタグを付ける)ことを行います。
2. 以下のコマンドを実行してプレイブック(advanced.yml
)を実行します。これにより、タグ、ボリューム、およびクラウドウォッチ監視が付いたAWS EC2インスタンスが起動されます。ansible-playbook advanced.yml

3. AWS EC2コンソールのインスタンスの「ストレージ」タブに移動します。 ブロックデバイスの下で、リストからボリュームIDをクリックして、インスタンスの詳細情報を表示します。

4. 最後に、インスタンスの概要情報ページで「タグ」タブをクリックします。プレイブックで設定したインスタンスのタグが表示されます(ステップ1のようなもの)。以下のようなものです。

結論
このチュートリアルでは、Ansible AWS EC2モジュールを利用して、単一のコマンドでAWS EC2インスタンスを管理する方法を学びました。また、再起動、終了、タグの追加など、AWS EC2インスタンスを調整する方法も学びました。
Ansible AWS EC2モジュールの知識が身についたので、インスタンスの管理ルーティンにAnsible EC2 AWSモジュールを取り入れる意思はありますか?cronジョブを追加してタスクを自動化することも考えられますか?