こんにちは、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を実行できるという意味のようです。
“使用を開始するには、ステートマネージャーまたは 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”の中身については後述します。
Playbook File
Playbook Fileの場所を指定します。zipファイルからの相対パスを指定するので、デフォルトで記載されている”hello-world-playbook.yml”を削除し、下記の通りに書き換えます。なおここで記載しているのは、”ansible_test.zip”内の後述するトップレベルのPlaybookの相対パスです。
次にターゲットとなるEC2インスタンスを指定します。今回は”インスタンスを手動で選択する”のラジオボタンにチェックを入れます。すると、ターゲットとなるEC2インスタンスが表示されますので選択します。
ここまで出来たら、一番下までスクロールして実行ボタンを押します。
実行結果
Playbook実行前です。
Playbook実行後、再度同じコマンドを実行しました。無事dockerがインストールされています。
EC2インスタンスに配信したファイル群の内容
EC2インスタンスに配信した”ansible_test.zip”のディレクトリ構造およびplaybookの内容を下記に示します。
今回はdockerをインストールするだけの内容になっています。
“ansible_test.zip”のディレクトリ構造
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を記載すれば、より高度な内容のインストール作業ができます。煩雑なインストール作業を自動化したいときに利用できますね。