リモートから Hello する

マシンは EC2 を使います。流れは、

  1. インベントリファイルを作る
  2. Role (実際の処理を書く)ファイルを作る
  3. ec2.ymlファイルを作る
  4. 確認

インベントリファイル

このファイルにターゲットにするマシンのipアドレスや変数などを設定していきます。hostsというファイルにしている例が多いと思います。

[ec2]
x.x.x.x

ec2というグループにx.x.x.xというipアドレスのマシンを設定しています。これはec2グループに対しての処理の時に、羅列したipアドレスのマシンすべての処理を流す感じになります。

Role

処理を細かく細分化する為に使います。ここでは数行なので必要ない感じですが、こちらに慣れたほうが便利だと思うので使ってみます。

Role は、roles/role-name/tasks/main.ymlというようなファイルに書いていきます。例えば、roles/ec2/tasks/main.ymlというファイルを作ります。その中身はこのようにします。

---
- name: Hello
  shell: echo hello from ec2 by ansible
  register: result
- debug: var=result.stdout
  when: result

リモートで表示したものをローカルで確認するタスクです。つまり、ローカルでhello from ec2 by ansibleと出すためのタスクです。

ec2.yml

名前は何でもいいですが、ec2グループに対して実行するのでec2.ymlにします。rolesec2を含めることで、roles/ec2/tasks/main.ymlを実行するように設定します。

---
- hosts: ec2
  roles:
    - ec2

確認

以下のオプションを指定して実行します。

  • -iは、見るインベントリファイル
  • -uは、sshする時のユーザー名
  • --private-keysshするときの秘密鍵
ansible-playbook ec2.yml -i hosts -u ec2-user --private-key=~/.ssh/id_rsa 

PLAY [ec2] ****************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************
ok: [x.x.x.x]

TASK [ec2 : Hello] ********************************************************************************************************
changed: [x.x.x.x]

TASK [ec2 : debug] ********************************************************************************************************
ok: [x.x.x.x] => {
    "result.stdout": "hello from ec2 by ansible"
}

PLAY RECAP ****************************************************************************************************************
x.x.x.x              : ok=3    changed=1    unreachable=0    failed=0

ちゃんとログがでれば完了です。

予め設定した変数を渡す

ある.ymlファイルに変数を羅列して、それをansible-playbookで指定するルート.ymlvars_filesとして指定します。

vars/ec2.ymlにこんな感じでファイルを作ります。

---
text: ハロー

ルート.ymlに以下を追加します。

  vars_files: vars/ec2.yml

変数を使うには {{...}} の形

例えばこのようなタスクを作りました。変数を埋め込むには{{...}}という形で使います。今回は変数はtextなので{{text}}ですね。

---
- name: Hello
  shell: echo {{text}}
  register: result
- debug: var=result.stdout
  when: result

タスクを実行して、このように表示されるはずです。

ok: [13.114.65.234] => {
    "result.stdout": "ハロー"
}