Ansibleがメチャクチャ便利だった


初めて触るAnsible

複数のAWS EC2にOS初期設定を行う。お約束のことなので、できるだけ自動化したい。
AWSマネジメントコンソールにて複数のサーバを用意する必要があったので
構成管理ツールのAnsibleを使った。

手順

  1. EC2セットアップ
  2. pythonをインストール
  3. awscliをインストール
  4. ansibleをインストール
  5. 初期設定ファイルを取得
  6. 再起動

EC2セットアップ

AWSマネジメントコンソールにてEC2をセットアップする。用意する際にAMIを指定するようにする。
バージョン等がずれると再度インストールしなおしになるためAMIで確認することをお勧めします。

今回はRHELをインストールしたかったので下記の方法でAMIを取得した
http://blog.serverworks.co.jp/tech/2019/06/18/post-71160/

sshで接続できることを確認

EC2を構築する際にキーペアが発行される、
もしくは既存のキーペアを使ってssh接続できることを確認します。

pythonをインストール

EPELリポジトリからpython3をyumでインストール
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-enable-epel/

$ sudo su -
$ yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ yum -y install python3
$ yum -y install python3-pip
$ pip3 install --upgrade pip

awscliをインストール

$ sudo su -
$ pip3 install --upgrade awscli

ansibleをインストール

$ pip3 install --upgrade ansible
$ mkdir -p /opt/ansible

playbookを作成して実行

一から作るのは勉強になりますが、
今回は以下のリポジトリを参考にさせていただきました。
https://github.com/kouji-kojima/sample-ansible-el7-init

  1. ホスト名
  2. 時刻同期
  3. タイムゾーン
  4. 文字コード などなど
$ ansible-playbook -i localhost site.yml --private-key=/path/key.pem -vvv

後処理

# epel無効化
$ sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/epel* 
$ systemctl restart sshd
# error確認
$ egrep -i "error|warning|fatal|fail" /var/log/messages

問題なければ、このイメージをコピーして配布する。
同一の設定のOSを複数セットアップする際にはめっちゃくちゃ便利です。

余談

EC2にはユーザーデータを利用することもできる。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/user-data.html