AWS Systems ManagerでAnsibleを利用したインストール作業自動化

こんにちは、SCSKの梅沢です。

今回は、Ansibleの紹介記事を書こうと思います。

Ansibleとはサーバ構築などを自動化する構成管理ツールです。煩雑なインストール作業を自動化するツールとして有用です。AWS上のインスタンス利用の際にも、煩雑なインストール作業をする場合があると思いますが、AWS上でもAnsibleを実行させることができます。本記事では、Amazon EC2へのdockerのインストール作業を例に、Ansibleの実行手順を記載してみます。

Ansibleの簡単な説明

概要

Ansibleは、Redhatが開発するオープンソースの構成管理ツールです。事前に用意したPlaybookという設定ファイルに従って、ソフトウェアのインストール作業や設定を自動実行することが可能です。

Ansibleの特長として、下記があげられます。

  • エージェントレスであること
  • 冪等性があること(何度実行しても同じ状態に収束する)
  • 様々なモジュールが存在すること

AWS Systems Managerでの対応

2019年、AWS Systems ManagerでAnsibleのPlaybookが実行可能になったとリリース記事が出されました。”複雑な”というのは、ディレクトリ構造内に圧縮または保存されているさまざまなPlaybookを実行できるという意味のようです。

AWS Systems Manager で複雑な Ansible のプレイブックを実行可能に

“使用を開始するには、ステートマネージャーまたは Run Command から新しい AWS-ApplyAnsiblePlaybooks のドキュメントを選択してください。”とあるので、早速試してみようと思います。

実行手順

準備

Ansibleで構成管理する対象のEC2インスタンスと、それにアタッチするIAM Roleを作成します。

IAM Roleを作成

EC2インスタンスでアクションを実行するための権限を AWS Systems Manager に付与するため、IAM Roleを作成します。IAM Roleに付与するポリシー名は「AmazonEC2RoleforSSM」です。

参考:AWS Systems Manager を使用してEC2インスタンスでRun Commandを実行する | DevelopersIO (classmethod.jp)のstep1を参照ください。

インスタンス

詳細手順は省略しますが、EC2インスタンスを作成し、先ほど作成したIAM RoleをEC2インスタンスにアタッチします。なお、EC2インスタンスにはAWS Systems Manager エージェント (SSM Agent) を事前にインストールする必要がありますが、デフォルトでインストールされているAmazon マシンイメージ (AMI)を使用している場合はその限りではありません。

参考:Linux 用の EC2 インスタンスに手動で SSM Agent をインストールする – AWS Systems Manager (amazon.com)

AWS Systems Manager 上で AnsibleのPlaybookを実行

AWS Systems Manager > Run Commandを選択し、”ansible”で検索します。

検索結果に2種類表示されます。
AWSの記事(チュートリアル: Ansible プレイブックを実行する関連付けの作成 – AWS Systems Manager (amazon.com))に、“AWS-RunAnsiblePlaybook ドキュメントは廃止されました。” とあるので、“AWS-ApplyAnsiblePlaybooks”の方を選択します

選択したまま下にスクロールしていき、パラメータを入力していきます。
今回、デフォルト値以外で修正したパラメータは下記の通りです。

Source Info

EC2インスタンスに送るAnsibileのファイルの場所を指定します。今回は、Ansibileのzipファイルを作成しS3に置きました。S3バケット名を適当に作成し、配下にsampleディレクトリを作成し”ansible_test.zip”を置きましたので、そのURLを指定しています。S3のURLは、各自の環境に合わせてください。”ansible_test.zip”の中身については後述します。

{“path”:”https://(S3バケット名).s3.ap-northeast-1.amazonaws.com/sample/ansible_test.zip”}
Playbook File

Playbook Fileの場所を指定します。zipファイルからの相対パスを指定するので、デフォルトで記載されている”hello-world-playbook.yml”を削除し、下記の通りに書き換えます。なおここで記載しているのは、”ansible_test.zip”内の後述するトップレベルのPlaybookの相対パスです。

ansible_test/site.yml

次にターゲットとなるEC2インスタンスを指定します。今回は”インスタンスを手動で選択する”のラジオボタンにチェックを入れます。すると、ターゲットとなるEC2インスタンスが表示されますので選択します。

ここまで出来たら、一番下までスクロールして実行ボタンを押します。

実行結果

Playbook実行前です。

Playbook実行後、再度同じコマンドを実行しました。無事dockerがインストールされています。

EC2インスタンスに配信したファイル群の内容

EC2インスタンスに配信した”ansible_test.zip”のディレクトリ構造およびplaybookの内容を下記に示します。
今回はdockerをインストールするだけの内容になっています。

“ansible_test.zip”のディレクトリ構造
ansible_test/
  roles/
    docker/
      tasks/
        main.yml
  site.yml
Playbookの内容

ansible_test/site.yml (トップレベルのPlaybook)

---
- hosts: localhost
  become: yes
  roles:
    - docker

ansible_test/roles/docker/tasks/main.yml (role用のPlaybook)

---
- name: yum install
  command: yum install -y docker

- name: start docker
  command: systemctl start docker

- name: usermod
  command: usermod -a -G docker ec2-user

- name: enable docker
  command: systemctl enable docker

 

まとめ

AWS Systems Manager 上で AnsibleのPlaybookを実行できることを確認しました。

より複雑なPlaybookを記載すれば、より高度な内容のインストール作業ができます。煩雑なインストール作業を自動化したいときに利用できますね。

 

タイトルとURLをコピーしました