##環境
EC2 (Amazon Linux 2 AMI)
Ansible 2.7.10
##やりたいこと
Ansibleを使って複数のEC2に一括で同じ環境変数を設定したい。(Ansibleはインストール済みとする)
##ディレクトリ構成
.
├ group_vars/
├ host_vars/
├ roles/
│ └ set_environment/
│ ├ files/
│ │ └ environment.j2
│ └ tasks/
│ └ main.yml
├ inventory.ini
├ playbook.yml
└ ansible.cfg ← SSH接続で使用する秘密鍵のファイルのパスを指定
##実装
Ansible には、template
というモジュール があり、src
というパラメータに指定したファイルをテンプレートとして、dst
に指定したリモート先にファイルを生成することができます。このモジュールを利用して対象のサーバの/etc/environmentを上書きします。
まずタスクファイルにtemplateモジュールを設定します。
- name: set /etc/environment
template:
src: ../files/environment.j2
dest: /etc/environment
become: yes
- name: results
debug: var=RESULT.results
src
に指定したenvironment.j2
に設定したい環境変数を定義します。
(※templateモジュールはJinja2というテンプレートエンジンによるテンプレートファイルを利用するため、必ず.j2
ファイルに定義する)
DB_NAME="xxxxxxxxxxxxxxxx"
DB_USER_NAME="xxxxxxxxxxx"
DB_PASSWORD="xxxxxxxxx"
DB_HOST="xxxxxxx.c4s7xxxxxxiwp.ap-northeast-1.rds.amazonaws.com"
playbook.yml
のrolesにrole(set_environment)を設定します。
---
- name: set environment(環境変数の設定)
hosts: all
user: ec2-user
become: True
roles:
- set_environment
[host_group1]
xx.xxx.xxx.xxx
xx.xxx.xx.xxx
xx.xxx.xx.xxx
xx.xxx.xxx.xxx
[host_group2]
xx.xxx.xxx.xxx
xx.xxx.xx.xxx
xx.xxx.xx.xxx
xx.xxx.xxx.xxx
[host_group3]
xx.xxx.xxx.xxx
xx.xxx.xx.xxx
xx.xxx.xx.xxx
xx.xxx.xxx.xxx
上記の設定をした上で下記のようにplaybookを実行すると、対象のサーバの環境変数を設定することができます。
$ ansible-playbook -i inventory.ini -l <host_group> playbook.yml