AnsibleでAWS EFSのマウント! ヘルパーでもできるのか?やってみた
何がしたいのか
今回は、AnsibleでAWS EFSのマウントを定義する際に、マウントヘルパーコマンド(コマンド例:mount -t efs -o tls
)のようにfstypeやoptsを指定しても問題なく動作するのか検証してみるという記事になります。「ansible aws efs mount」などで検索しても、マウントヘルパーなしの通常のマウントでの記述例しか見られなかったので記事化してみました!
マウントヘルパーとは?
AWS EFSを対象とするマウントコマンドを実行する際に、
・推奨されるいくつかの設定を省略し、
・なおかつ追加で、転送時の暗号化やサポートログの取得ができる
というものです。
以下にマウント実行例を示します(AmazonLinux2のAMIを使用しているEC2から/var/www/html をマウントしたい場合)。
EFS_ID="fs-XXXXXXXXXXXXXX"
MOUNT_TARGET=$EFS_ID":/"
# 通常(ヘルパーなし)
sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport $MOUNT_TARGET /var/www/html
# マウントヘルパー(転送時の暗号化を有効にするためには追加で-o tls)
sudo mount -t efs $MOUNT_TARGET /var/www/html
さらなる詳細はこちら(マウントヘルパー自体についてはこの記事が一番学びになりました):
このマウントヘルパーを用いてAnsibleを定義してもうまくいくのかどうか、それが今回の記事の検証になります(通常の方法でのEFSマウントは割と記事があります)。結論とPlaybookの例
早速結論ですが、マウントヘルパーでも問題なく、動作できました!
以下、Playbookの例です。
※ディレクトリ構成などは割愛。{{ }}はAnsibleの変数で、EFSのIDをうける。)
- name: install amazon-efs-utils
yum: amazon-efs-utils
state: present
become: yes
- name: mount efs volume
mount:
path: "/var/www/html"
src: "{{ _efs_fact_id }}:/"
fstype: "efs" # Point1
opts: "tls" # Point2
state: mounted
become: yes
こんな感じでfstypeのところにefs、オプションにtlsと定義しました。
本当にできているのか検証
検証1:マウントできているのか
まずマウントができているのか確認しました。
sh-4.2$ df -Ph
Filesystem Size Used Avail Use% Mounted on
devtmpfs 482M 0 482M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 444K 492M 1% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 2.1G 6.0G 26% /
127.0.0.1:/ 8.0E 0 8.0E 0% /var/www/html
マウント時に指定したパス(/var/www/hmtl)が表示されています。
また、Filesystem列がループバックアドレス(127.0.0.1)になっているのは、転送時の暗号化が有効化されているためです!
検証2:自動マウントできているのか
次にAnsibleのMountモジュールの特徴として、EFSに限らず、Playbook上で特に指定しなければデフォルトで自動マウントの設定までやってくれるというものがあります。
そこで以下の確認もしました。
sh-4.2$ cat /etc/fstab
# 以下、出力結果
UUID=04b92f2f-4366-4687-868b-7c403cc59901 / xfs defaults,noatime 1 1
fs-0f0827637cd9e2e19 /var/www/html efs tls 0 0
出力結果の、2行目がEFSのID、パス、ネットワークタイプなどが記載されていますね。いい感じ!
まとめ:AnsibleでEFSをマウントする際でも、マウントヘルパーを使うべし
思っていた以上にAnsibleのマウントモジュールが柔軟でした。
これでAnsibleとマウントヘルパーのメリットが最大限発揮できます。
AnsibleでEFSのマウントを定義する場合に、転送時の暗号化ができるマウントヘルパーが使えないとなれば、Ansibleで定義するのはあきらめようと思っていたので個人的には大満足です。
今回の技術のメリットとしては、
単に「Ansible × EFSマウントヘルパー」が普通に動作するよ、ということで両者それぞれのメリットが発揮されるというものになります。
ただ記事を書いておいてなんですが、検索にヒットしなかった時点で、Ansibleからマウントするということはあまりないのかなとは思います。
今回は単純にAnsibleから実行してみたかったのと、EC2の設定周りをPlaybookとしてコードで一括管理したかったという中で、情報がなかったので記事としてまとめてみました!参考になればと思います。
参考記事
○ansibleのマウントモジュールについて
○ヘルパースクリプトを使うメリット
・転送時のデータの暗号化はヘルパースクリプトしかできない
・サポートログの取得
Discussion