1. comefigo

    No comment

    comefigo
Changes in body
Source | HTML | Preview
@@ -1,94 +1,96 @@
# 概要
Amazon EFSの作成からEC2にマウントするまでをAnsibleでやります
Ansibleのmountモジュールを使用することで、**マウント済みチェック**や**自動マウント設定**もやってくれるので便利
# 手順
1. [EFSアクセス用のセキュリティグループの作成もしくは、既存のセキュリティグループに追加](https://docs.aws.amazon.com/ja_jp/efs/latest/ug/accessing-fs-create-security-groups.html)(手動)
2. EFSボリュームの作成
3. EC2にマウント
# コード
```yaml:amazon_efs.yml
---
# EFSボリュームの作成
- name: create efs volume
hosts: localhost
connection: local
gather_facts: False
tasks:
# create EFS volume
- name: Create EFS
efs:
state: present
region: "リージョンID"
name: "sample_efs"
tags:
Name: "タグ名"
targets:
- subnet_id: "AZ-aのサブネットID"
security_groups: [ "EFS接続できるセキュリティグループID" ]
- subnet_id: "AZ-cのサブネットID"
security_groups: [ "EFS接続できるセキュリティグループID" ]
performance_mode: general_purpose
encrypt: yes
# EFSボリュームのマウント
- name: efs mount to ec2
hosts: my_ec2
+ vars:
+ efs_vol_name: "sample_efs"
tasks:
# EFSボリュームIDを取得する
- local_action:
module: efs_facts
- name: "sample_efs"
+ name: "{{ efs_vol_name }}"
run_once: true
register: _efs_fact
- set_fact:
_efs_fact_id: "{{ _efs_fact.ansible_facts.efs[0].file_system_id }}"
# EFSマウント用のユーティリティツールをインストール
# amazon-efs-utilsを使用して、マウントしないが、とりあえずインストールしておく
- name: install efs libs
yum:
name: "{{ item }}"
state: present
become: yes
with_items:
- "nfs-utils"
- "amazon-efs-utils"
# EC2にマウント用のディレクトリを作成しておく
- name: Create data store directory for efs mount
file:
- dest: "/home/ec2-user/sample_efs"
+ dest: "/home/ec2-user/{{ efs_vol_name }}"
state: directory
# EFSのマウント
- name: mount efs volume
mount:
- path: "/home/ec2-user/sample_efs"
+ path: "/home/ec2-user/{{ efs_vol_name }}"
src: "{{ _efs_fact_id }}.efs.ap-northeast-1.amazonaws.com:/"
fstype: "nfs4"
opts: "nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport"
state: mounted
become: yes
# マウント後はrootユーザの所有権になるため、明示的に所有権を変更
- name: change directory owner
file:
- dest: "/home/ec2-user/sample_efs"
+ dest: "/home/ec2-user/{{ efs_vol_name }}"
owner: "ec2-user"
group: "ec2-user"
state: directory
become: yes
```
# ポイント
## [mountモジュール](https://docs.ansible.com/ansible/2.6/modules/mount_module.html)
- stateで`mounted`にすることで自動マウントの設定(`/etc/fstab`)もやってくれます
- optsは[Amazon EFSの設定値](https://docs.aws.amazon.com/ja_jp/efs/latest/ug/mounting-fs.html#mounting-fs-mount-helper-ec2)を用いる