3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Ansible]複数のサーバに一括で環境変数を設定する方法

Posted at

##環境
EC2 (Amazon Linux 2 AMI)
Ansible 2.7.10

##やりたいこと
Ansibleを使って複数のEC2に一括で同じ環境変数を設定したい。(Ansibleはインストール済みとする)

ansible.png

##ディレクトリ構成

 .
 ├ 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モジュールを設定します。

main.yml
- 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ファイルに定義する)

environment.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)を設定します。

playbook.yml
---
- name: set environment(環境変数の設定)
  hosts: all
  user: ec2-user
  become: True
  roles:
    - set_environment
inventory.ini
[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
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?