【入門・初心者向け】Ansibleはじめました〜簡単なPlaybookの実行まで
EC2(Amazon Linux 2)上でやってみました。
Ansibleインストール
EPELレポジトリを有効にして、Ansibleをインストールします。
$ sudo yum --enablerepo=epel install ansible $ sudo yum install ansible $ ansible --version # 確認
Ansible実行テスト
ローカルを対象にAnsibleの実行テストをしてみます。
ひとまず、Ansible構成を作っていくディレクトリを準備します。
$ mkdir sandbox-ansible $ cd sandbox-ansible
Ansibleでは Inventory というものを定義することで、設定対象のホストを指定します。
ここでは inventories
ディレクトリを作成し、そこに dev
ファイルを用意します。
$ mkdir inventories $ touch inventories/dev
ファイル名ですが、設定先のホストがどのような役割なのかわかるようにすると良いと思います。
開発環境なら dev
で、ステージングを構築するなら staging
、本番DBサーバーを構築するなら db
などです。
今回はローカルを対象にするので dev
に以下のような記述をします。
[dev] localhost
IPアドレスで指定しても大丈夫です。
では、実行テストしてみます。
$ ansible all -i inventories/dev --connection=local -m ping
Ansibleはアクセス先のホストに対してSSH接続を行い、コマンドを叩きます。
ここではlocalhostが対象なので --connection=local
を指定することで、SSH接続をさせずに実行しています。
成功すると以下のように返ってくるはずです。
localhost | SUCCESS => { "changed": false, "ping": "pong" }
無事、実行テストはできました。
Playbookの作成
次はPlaybookを作っていきます。
$ touch dev.yml
Playbookはyaml形式で記述します。
ここでは、次のように記述してみます。
- hosts: dev vars: hello: "Hello Ansible!" tasks: - name: output message. debug: msg="{{ hello }}" - name: output inventory hostname debug: msg="Inventory hostname is {{ inventory_hostname }}"
中身の解説です。
まず hosts
は必須になります。グループを指定してあげましょう。
vars
を使うことで変数が定義でき、定義した変数は tasks
などで使用することができます。
tasks
では実行するタスクを記述します。
ここでは2つのタスクを実行しています。
name
でタスクに名前をつけることができます。
debug
はAnsibleに用意されているモジュールと呼ばれるものの1つで、実行中にメッセージを出力するモジュールになります。
Ansibleには多数のモジュールが用意されており、モジュールを使うことで、ファイルの作成、サービスの起動・停止、yumパッケージをインストールするなどの様々なタスクを実行できます。
今回作成したタスクは、自分で定義したhello変数の出力、それと、 inventory_hostname
というAnsibleに用意されているマジック変数を使ってInventoryに指定しているホスト名の出力を行なっています。
では、実行してみましょう。
ansible-playbook
コマンドを使ってPlaybookを指定し、実行します。
$ ansible-playbook -i inventories/dev --connection=local dev.yml
成功すると以下のように出力されます。
PLAY [dev] ************************************************************************************************************************************************************************************************* TASK [Gathering Facts] ************************************************************************************************************************************************************************************* ok: [localhost] TASK [output message.] ************************************************************************************************************************************************************************************* ok: [localhost] => { "msg": "Hello Ansible!" } TASK [output inventory hostname] *************************************************************************************************************************************************************************** ok: [localhost] => { "msg": "Inventory hostname is localhost" } PLAY RECAP ************************************************************************************************************************************************************************************************* localhost : ok=3 changed=0 unreachable=0 failed=0
簡単ではありますが、Playbookを実行できました。
次回は、本格的にサーバー設定をPlaybookに記述していきます。