1. comefigo

    Posted

    comefigo
Changes in title
+AnsibleでAmazon EFSの作成からマウントするまで
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,94 @@
+# 概要
+
+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
+ tasks:
+ # EFSボリュームIDを取得する
+ - local_action:
+ module: efs_facts
+ name: "sample_efs"
+ 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"
+ state: directory
+
+ # EFSのマウント
+ - name: mount efs volume
+ mount:
+ path: "/home/ec2-user/sample_efs"
+ 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"
+ 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)を用いる