はじめに
構成管理ツールはChefが有名ですが、よりシンプルで使いやすいAnsibleの基本的な使い方をご紹介していきます。
高機能なChefと比較すると、Ansibleは非常にシンプルです。
そもそも複雑なことはTerraformなどより適したツールで行い、サーバ・インスタンス単位のプロビジョニングはAnsibleで行う、という役割を持たせると管理しやすいと思います。
Ansibleとは
Ansibleは、IBMの子会社であるRed Hat, Inc.により開発されました。
設定した任意の内容に従い、ソフトウェアのインストールやパッチの適用、タスクの自動化にいたるまで、様々なITプロセスの自動化が可能なオープンソースの構成管理ツールです。
Ansibleの特徴として
エージェントレス
ChefやPuppetのようにサーバ側にエージェントをインストールすることなく、SSHが繋がる環境であればOKという手軽さです。
YAMLで記述
サーバの定義を記述したPlaybookは、YAML形式で記述していくのでプログラムに詳しくない人でも簡単に使うことができます。
その反面、複雑なことをしようとするとPlaybookがシェルスクリプトで埋まり、Ansibleの良さは失われるかもしれません。
冪等性
Ansibleは、「この処理を実行せよ」ではなく「この状態であることを保証せよ」という思想で作られているので、Playbookが同じであれば何度実行しても同じ結果になります(commandなど一部のモジュールは除く)。
以上の特徴があります。
そして、Ansibleが構成管理ツールとして便利なのはなにより、インフラのチーム共有が可能という点です。
my.cnfはこのバージョンではこの記述を入れておく、apacheはこのモジュール設定を入れておく、rubyはrbenvでどうするなど…インフラの知識や設定は属人化しやすい傾向にあります。
チーム内の誰かに「サーバ建てておいて」と頼んでみたところで、その人が調べながら構築した内容をチェックするのも大変な作業です。しかも、だいたい間違っていたりします。
Ansibleならそうした設定ファイルが管理できる為、Ansibleプロジェクトをgitで管理してチームで共有、serverspecなどのテストツールと合わせてCI経由で本番環境に適用といったDevOpsが可能です。
また、Ansibleのウェブサイトにも、
Ansible is designed around the way people work and the way people work together.
と記述されています。
チームで使いやすいサーバ構成管理ツールとしてのスタンスで開発されているのだと思います。
AWSでAnsible
早速、Ansibleをインストールしていきましょう。
ローカルのMacにはPython 2.7.13が入っているので、pipインストールします。
$ pip install ansible
これでAnsibleが使えるようになったので、シンプルにEC2インスタンスを建ててみましょう。
hostsとsite.ymlの2つのファイルを作成します。
■ hosts
127.0.0.1
■ site.yml
- hosts: localhost
gather_facts: no
connection: local
tasks:
- name: Create ec2 instanse
ec2:
key_name: mypemkey
instance_type: t2.micro
image: ami-bbf2f9dc
monitoring: no
wait: yes
region: ap-northeast-1
group_id: sg-12345678
vpc_subnet_id: subnet-9876543
assign_public_ip: yes
instance_tags:
Name: ansible-sample1
register: ec2
AWS環境をAnsibleで構成する際には、hostsをlocalhostと記述します。
そして、tasksにec2の設定内容が書いてあります。
今回はvpcのサブネットや、セキュリティグループ、キーペアなどは予め作成してあります。
YAML形式なので見たままですが、key_nameでキーペア、instance_typeで今回作成するインスタンスのスペック、imageでは使用するAMI、group_idでセキュリティグループ、などを指定しています。
■ シンタックスチェック
$ ansible-playbook -i hosts site.yml --syntax-check
playbook: site.yml
■ Dry run
$ ansible-playbook -i hosts site.yml -C
PLAY [localhost] ***
TASK [Create ec2 instanse] *
skipping: [127.0.0.1]
PLAY RECAP ***
127.0.0.1 : ok=0 changed=0 unreachable=0 failed=0
■ 実行
$ ansible-playbook -i hosts site.yml
PLAY [localhost] ***
TASK [Create ec2 instanse] *
changed: [127.0.0.1]
PLAY RECAP ***
127.0.0.1 : ok=1 changed=1 unreachable=0 failed=0
これだけでEC2インスタンスが立ち上がります。
もしPythonのエラーが出る場合は、interpreterのパスを指定してあげましょう。
■ hosts
127.0.0.1 ansible_python_interpreter=/Users/me/.pyenv/shims/python
AWS クレデンシャル
構成管理ツールは、EC2インスタンスの起動はもちろん停止なども出来るので、会社のAWSアカウントや本番アカウントにいきなり作ってしまうと万が一の際にトラブルになります。
社内用のアカウントに切り替えて実行したい時には、使用するクレデンシャル情報を指定することで対応できます。
予めAWSの認証情報からAWS Access Key ID
とAWS Secret Access Key
を取得して、
$ aws configure --profile mysecond
でローカル環境に設定しておきます。
Playbookの実行時に
$ AWS_PROFILE=mysecond ansible-playbook -i hosts site.yml
とすれば、AWS_PROFILEで指定したAWSアカウントで接続できます。