Ansible EC2 AWSモジュールを使用した仮想マシンの管理方法

既存のAmazon Web Service (AWS) EC2インスタンスを管理する場合、Management Consoleでのクリック操作はうまく動作します。しかし、インフラストラクチャが成長するにつれて、インスタンスの管理には多くの時間と複雑さが伴います。インスタンスを管理するためのより良い方法はありますか?はい、AWS Ansible EC2モジュールが役立ちます。

このチュートリアルでは、Ansible AWS EC2モジュールが例を使ったアプローチでAWS EC2インスタンスの効果的な管理を提供する方法について学びます。

続けて読んで、始めましょう!

前提条件

このチュートリアルは、ステップバイステップの手順で構成されています。一緒に進める場合は、以下の準備が整っていることを確認してください:

  • 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_keyaws_secret_keyの詳細を追加します。

チュートリアルではすべての操作をus-east-2リージョンで実行しますが、任意のAWSリージョンで同じ操作を実行できます。

ansible web -m amazon.aws.ec2 -a " state=restarted instance_tags=Name=Tag1 aws_access_key=AKIAVWOJMI5I2DPXXXX aws_secret_key=F9PaprqnPUn/XXXXXXXXXXXX region=us-east-2"

コマンドが完了すると、以下に示すようにCHANGEDメッセージが表示され、AnsibleがAWS EC2インスタンスの再起動に成功したことが確認されます。

Running an Ad Hoc Command to Restart an Amazon EC2 Instance

EC2インスタンスをAnsible Playbookで起動する

Ansibleのアドホックコマンドの実行方法を学びましたが、一度だけの操作には適しています!しかし、複数のタスクを実行する必要がある場合は、複数のタスクを実行するAnsible Playbookを作成します。

1. Ansibleコントローラーホストのターミナルを開き、次のコマンドを実行して~/ansible_aws_ec2_moduleというディレクトリを作成し、そのディレクトリに移動します。

このディレクトリには、Ansible AWS EC2モジュールを呼び出すために使用するplaybookとすべての必要な構成ファイルが含まれます。

mkdir ~/ansible_aws_ec2_module
cd ~/ansible_aws_ec2_module

2. 次に、お気に入りのテキストエディタを開き、~/ansible_aws_ec2_moduleディレクトリにmain.ymlというファイルを作成します。以下のYAML playbookの内容をmain.ymlファイルに入力します。

以下のプレイブックには、AWSアカウント内の特定のVPCにパブリックIPアドレスを持つインスタンスを起動するタスクが含まれています。

このチュートリアル全体で、aws_access_keyaws_secret_keyの値を自分のものに置き換えてください。

---
- name: Ansible EC2 instance Launch module demo
# Ansible EC2モジュールがオブジェクトを管理するリモートサーバーを定義する
  hosts: web
  remote_user: ubuntu # リモートユーザーをubuntuとして使用
  tasks:
		# パブリックIPを持つAWS EC2インスタンスを起動するタスク
    - name: start an instance with a public IP address
      amazon.aws.ec2:
				# キー名を設定
        key_name: mykey
				# インスタンスタイプ、イメージ、VPCサブネットID、パブリックIPの割り当て、awsリージョンを定義
        instance_type: t2.micro
        image: ami-0b9064170e32bde34
        wait: yes
        count: 1
        vpc_subnet_id: subnet-0dc9af4c75ad3e2ee
        assign_public_ip: yes
        aws_region: us-east-2
        aws_access_key: AKIAVWOJMI5XXXXXXXX
        aws_secret_key: F9PaprqnPUn/NP8lzQXXXXXXXXXXXXXXXXXX

3. 以下のコマンドを実行してプレイブック(`main.yml`)を呼び出します。その後、プレイブックは、`us-east-2`リージョンにインスタンスタイプを`t2.micro`として新しいインスタンスを作成するタスクを実行します。

ansible-playbook main.yml

下記のように、いくつかのタスクはchangedステータスを示しており、これはAnsibleがインスタンスを正常に作成し、タスクの状態をコマンドの実行に変更したことを示します。対照的に、いくつかのタスクは変更が必要ないため、okステータスが表示されます。

Executing a Playbook

4. お気に入りのウェブブラウザを開き、AWS管理コンソールにログインします。

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

Searching the EC2 service in the AWS account

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

newly created instance

複数のAWS EC2インスタンスを停止

おそらく、いくつかのAWS EC2インスタンスはもはや目的を果たしていません。その場合、Ansibleのプレイブックを実行して複数のインスタンスを停止または終了することができます。インスタンスのIDを指定し、タスクでAnsible EC2 AWSモジュールの動作を設定するための値を宣言してください。

1. stop.ymlという名前のAnsibleプレイブックを作成し、以下のコードをプレイブックにコピー/貼り付けてください。

以下のプレイブックは2つのインスタンス(i-0d8c7eb4eb2c643a1とi-0dbc17a67c0f7577c)を停止します。

---
- name: Stopping the already Launched EC2 instances using Ansible EC2 Module
# Ansible EC2モジュールがオブジェクトを管理するリモートサーバーを定義します
  hosts: web
  gather_facts: false
  # リモートユーザーとしてubuntuを使用します
  remote_user: ubuntu 
  vars:
    instance_ids:
      - 'i-0d8c7eb4eb2c643a1'
      - 'i-0dbc17a67c0f7577c'
    region: us-east-2
  tasks:
    - name: Stopping the already launched AWS EC2 instances
      amazon.aws.ec2:
        instance_ids: '{{ instance_ids }}'
        region: '{{ region }}'
        state: stopped
        wait: True
        vpc_subnet_id: subnet-0dc9af4c75ad3e2ee
        assign_public_ip: yes
        aws_access_key: AKIAVWOJMI5XXXXXXXX
        aws_secret_key: F9PaprqnPUn/NP8lzQXXXXXXXXXXXXXXXXXX

インスタンスを停止する代わりに終了させたい場合は、stateの値をabsentに変更してください。

2. 以下のコマンドを実行してプレイブック(stop.yml)を実行し、プレイブックで指定したインスタンスを停止します。ansible-playbook stop.yml

ansible-playbook stop.yml
Executing the Ansible playbook using the ansible-playbook command.

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

Viewing Stopped Instances

タグ、ボリューム、およびCloud Watchモニタリングを持つインスタンスの作成

おそらく、タギング、クラウドウォッチアラームでの監視、およびストレージ用のボリュームの作成など、より高度なコンポーネントでインスタンスをプロビジョニングする必要があるかもしれません。その場合、Ansible EC2 AWSモジュールを使ったプレイブックを使用すると便利です。

タグはAWSリソースを整理し、AWS Management Consoleでのリソースの効率的なコスト計算を可能にする優れた方法です。

1. 新しいAnsibleプレイブックをadvanced.ymlという名前で作成し、以下のコードをプレイブックに記述します。

以下のプレイブックは、AWS EC2インスタンスを起動し、(volumes—> /dev/sdb、監視、およびInstance1のタグを付ける)ことを行います。

---
- name: Adding Tag, Volumes, and cloud Watch Monitoring to an an instance
  hosts: web
  remote_user: ubuntu
  tasks:
    - name: Adding Tag, Volumes, and cloud Watch Monitoring to an an instance
      amazon.aws.ec2:
        instance_type: t2.micro
        image: ami-0b9064170e32bde34
        vpc_subnet_id: subnet-0dc9af4c75ad3e2ee
        region: us-east-2
        aws_access_key: AKIAVWOJMI5I2DXXXX
        aws_secret_key: F9PaprqnPUn/NP8lzQ5lWjXXXXXXXXXXXXXXXx
				# タイプio1のAWS EC2インスタンスにボリュームを作成し、アタッチする
        volumes:
          - device_name: /dev/sdb
            volume_type: io1
            iops: 1000
            volume_size: 100
				# AWS EC2インスタンスのクラウドウォッチ監視を有効にする
				# 起動されるAWS EC2インスタンスの監視
        monitoring: yes
				# 起動されるAWS EC2インスタンスにタグを付ける
        instance_tags:
            Name: Instance1

2. 以下のコマンドを実行してプレイブック(advanced.yml)を実行します。これにより、タグ、ボリューム、およびクラウドウォッチ監視が付いたAWS EC2インスタンスが起動されます。ansible-playbook advanced.yml

ansible-playbook advanced.yml
Executing the Ansible Playbook to Create an Instance with Tag, Volume, and Cloud Watch Monitoring

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

Verifying the volume created in the AWS account for the AWS EC2 instance.

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

Verifying the tags in the AWS account for the AWS EC2 instance.

結論

このチュートリアルでは、Ansible AWS EC2モジュールを利用して、単一のコマンドでAWS EC2インスタンスを管理する方法を学びました。また、再起動、終了、タグの追加など、AWS EC2インスタンスを調整する方法も学びました。

Ansible AWS EC2モジュールの知識が身についたので、インスタンスの管理ルーティンにAnsible EC2 AWSモジュールを取り入れる意思はありますか?cronジョブを追加してタスクを自動化することも考えられますか?

Source:
https://adamtheautomator.com/ansible-ec2/