AWS サポート自動化ワークフローで EFS のトラブルシューティングを簡単に!「AWSSupport-CheckAndMountEFS」を試してみた

AWS サポート自動化ワークフローで EFS のトラブルシューティングを簡単に!「AWSSupport-CheckAndMountEFS」を試してみた

Clock Icon2024.11.20

こんにちは。テクニカルサポートチームのShiinaです。

はじめに

EFS を作成したもの、うまく EFS ファイルシステムを EC2 インスタンスにマウントできなかったことはありませんか?
EFS ファイルシステムをマウントするには、EC2 インスタンスが必要となる前提条件を満たしている必要があります。 
今回はマウントに関する問題のトラブルシューティングに役立つ AWS サポート自動化ワークフロー(SAW)をご紹介します。

AWS サポート自動化ワークフロー(SAW)とは

AWS サポートエンジニアリングが過去の問題解決経験から作成した、厳選された Systems Manager セルフサービス自動化ランブックのコレクションです。
これらのランブックは、AWS リソースに関する一般的な問題のトラブルシューティング、診断、修正を容易にしてくれる便利なものです。

ランブックの概要

「AWSSupport-CheckAndMountEFS」は EFS ファイルシステムをマウントするための前提条件の確認を行うランブックです。
セキュリティグループ、名前解決などのネットワーク疎通確認をはじめ、ユーティリティの導入確認、NFSv4 サポート状況確認まで実施してくれます。
トラブルシューティングの診断を行うものですが、オプションを指定することでマウントポイントとなるディレクトリの作成およびマウントを自動で行ってくれます。

処理の概要

ランブックで実施している処理の概要を簡単にまとめてみました。

  • 指定されたインスタンスのサブネット ID、セキュリティグループ、アベイラビリティゾーンを取得し、結果を出力します。
  • 指定された EF Sファイルシステムのマウントターゲット ID、サブネット、IP アドレス、アベイラビリティゾーン、セキュリティグループを取得し、ファイルシステムポリシーの存在を確認します。
  • 指定されたインスタンスと EFS のセキュリティグループルールを評価し、インスタンスが EFS にアクセスできるかどうかを確認します。
  • 指定されたインスタンスが Systems Manager にオンラインで接続されているかどうかを確認します。失敗した場合は処理を中止します。
  • Action パラメータが OnlyCheck の場合は指定されたインスタンスでシェルスクリプトを実行し、EFS の前提条件を確認します。
    DNS 解決、NFS 接続、EFS/NFS ユーティリティのインストール状況、NFSv4 のサポートなどをチェックします。
  • Action パラメータが CheckandMount の場合は指定されたインスタンスでシェルスクリプトを実行し、EFS をマウントします。
    マウントポイントの検証、既存のマウントの確認、EFS のマウントを行います。
  • 最終的な診断結果を出力します。

入力パラメータ

パラメーター 必須 説明 備考
AutomationAssumeRole Systems Manager Automation がユーザーに代わってアクションを実行する IAM ロール名 指定なしの場合は実行者の権限を使用
Region EC2 インスタンスとファイルシステムが配置されているリージョン
Action 前提条件を検証するか、前提条件を検証してファイルシステムをマウントするか動作を選択 Check / CheckandMount のいずれか
EfsId マウントする EFS ファイルシステム ID (fs-xxxxxxxx)
MountTargetIP マウントターゲットの IP アドレス DNS 名前解決できない場合に使用
MountOptions EFS マウントヘルパーでサポートされるマウントオプション _netdev / tls,_netdev / iam,tls,_netdev のいずれか
MountPoint ファイルシステムをマウントするディレクトリ

やってみた

EFS および EC2 インスタンスを作成し、ランブックを実行してみます。
ターゲットの EC2 インスタンスは起動のみ実施した状態とし、マウントなどの操作は行なっていない状態としました。

IAM 設定(任意)

本ランブックでは Systems Manager Automation がユーザーに代わってアクションを実行できるよう IAM ロールの指定が可能です。
AutomationAssumeRole パラメータとして指定が可能ですが、任意のパラメータとなっています。
最小限の権限で実行すべく、今回は専用のロールを作成し、実施してみました。

ロール名:SSM-CheckAndMountEFS-Role

  • インラインポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeAutomationExecutions",
                "ssm:DescribeAutomationStepExecutions",
                "ssm:DescribeInstanceInformation",
                "ssm:DescribeInstanceProperties",
                "ssm:StartAutomationExecution",
                "ssm:GetAutomationExecution",
                "ssm:GetDocument",
                "ssm:ListCommands",
                "ssm:ListCommandInvocations",
                "ssm:ListDocuments",
                "ssm:SendCommand",
                "iam:ListRoles",
                "ec2:DescribeInstances",
                "ec2:DescribeSecurityGroups",
                "elasticfilesystem:DescribeFileSystemPolicy",
                "elasticfilesystem:DescribeMountTargets",
                "elasticfilesystem:DescribeMountTargetSecurityGroups",
                "resource-groups:*"
            ],
            "Resource": "*"
        }
    ]
}

SSM-CheckAndMountEFS-Role-IAM-Global-11-18-2024_02_17_PM

  • 信頼関係
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

SSM-CheckAndMountEFS-Role-IAM-Global-11-18-2024_02_17_PMshinrai

前提条件の検証で実行(Check)

はじめに前提条件を検証で実施してみました。
下記 URL よりドキュメントを開きます。
https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-CheckAndMountEFS

Action パラメータを Check で実施してみます。
「オートメーションを実行する」を選択し、次のパラメータを指定します。

  • AutomationAssumeRole:SSM-CheckAndMountEFS-Role
  • Region:ap-northeast-1
  • Action:Check
  • EfsId:EFS ファイルシステム ID (fs-xxxxxxxx)
  • MountOptions:_netdev

check

次の結果が出力されました。

--------------------------------------------
|  Evaluating EFS security groups rules | 
--------------------------------------------
FAILED: Port 2049 not opened in any of the security groups associated with Mount target fs-xxxxxxxxxxxxxxxx

-------------------------------
|  Testing DNS resolution  | 
-------------------------------
PASSED: Resolvable to IP: 10.0.0.154

-----------------------------------------------------
|  Testing NFS connectivity to EFS DNS Name  |
-----------------------------------------------------
FAILED: Connection to fs-xxxxxxxxxxxxxxxx.efs.ap-northeast-1.amazonaws.com:2049 is UNSUCCESSFUL.Check the security group attached to the instance and EFS.Also, check the OS level firewall configuration if any. Port 2049 is NOT Reachable.

「Evaluating EFS security groups rules」 で FAILED となり、EFS のセキュリティグループルールで2049 ポートのインバウンドルールが許可されていないメッセージが表示されました。
実際に EFS に割り当てているセキュリティグループを確認してみると、2049 ポートのインバウンドルールの設定が不足していました!

securityGroups-VPC-Console-11-18-2024_02_32_PM

セキュリティグループのインバウンドルールを修正の上、再度実行してみます。

Instance and EFS details:

a. Instance ID is  : i-xxxxxxxxxxxxxxxx
b. Instance subnet is subnet-xxxxxxxxxxxxxxxx | Security Groups are sg-xxxxxxxxxxxxxxxx | AZ is ap-northeast-1a

a. EFS DNS is fs-xxxxxxxxxxxxxxxx.efs.ap-northeast-1.amazonaws.com
b. EFS Mount Target details are as follows:

1.subnet-xxxxxxxxxxxxxxxx | ap-northeast-1a | fsmt-xxxxxxxxxxxxxxxx | 10.0.0.154 | sg-xxxxxxxxxxxxxxxx
2.subnet-xxxxxxxxxxxxxxxx | ap-northeast-1c | fsmt-xxxxxxxxxxxxxxxx | 10.0.3.128 | sg-xxxxxxxxxxxxxxxx
3.subnet-xxxxxxxxxxxxxxxx | ap-northeast-1d | fsmt-xxxxxxxxxxxxxxxx | 10.0.5.38 | sg-xxxxxxxxxxxxxxxx

c. Does File System Policy Exist for this EFS? False
d. Is EFS already mounted on the Instance: fs-xxxxxxxxxxxxxxxx is NOT mounted.

--------------------------------------------
|  Evaluating EFS security groups rules | 
--------------------------------------------
PASSED: Security Groups associated with the EFS Mount target are configured to ALLOW Traffic from Instance.

-------------------------------
|  Testing DNS resolution  | 
-------------------------------
PASSED: Resolvable to IP: 10.0.0.154

-----------------------------------------------------
|  Testing NFS connectivity to EFS DNS Name  |
-----------------------------------------------------
PASSED: Connection to fs-xxxxxxxxxxxxxxxx.efs.ap-northeast-1.amazonaws.com:2049 is SUCCESSFUL.

--------------------------------------------------
|  Checking if EFS/NFS-Utils are installed  |
--------------------------------------------------
FAILED: Both aws-efs-utils and nfs client utils are missing. Install : https://docs.aws.amazon.com/efs/latest/ug/manage-efs-utils-with-aws-sys-manager.html

------------------------------------------------------------
|  Checking if this Linux Distribution supports NFSv4   |
------------------------------------------------------------
CONFIG_NFS_V4=m
CONFIG_NFS_V4_1=y
PASSED: This Instance support Network File System versions 4.0 or 4.1 (NFSv4).

「Evaluating EFS security groups rules」、「Testing NFS connectivity to EFS DNS Name」ともに PASSED になりました!

前提となる条件に対してそれぞれ検証を実施してくれるため、原因の切り分けに非常に役立ちます。
例えば 「Evaluating EFS security groups rules」 は PASSED であるものの、
「Testing NFS connectivity to EFS DNS Name」 が FAILED の場合は OS 内部のファイアウォールが原因ではないかといった形で切り分けができます。

前提条件を検証およびファイルシステムをマウント(CheckandMount)

次に前提条件を検証しつつ、ファイルシステムのマウントを実施してみました。
Action パラメータを CheckandMount で実施してみます。
「オートメーションを実行する」を選択し、次のパラメータを指定します。

  • AutomationAssumeRole:SSM-CheckAndMountEFS-Role
  • Region:ap-northeast-1
  • Action:CheckandMount
  • EfsId:EFS ファイルシステム ID (fs-xxxxxxxx)
  • MountOptions:_netdev
  • MountPoint:/data

checkmount

次の結果が出力されました。

Instance and EFS details: 

a. Instance ID is  : i-xxxxxxxxxxxxxxxx
b. Instance subnet is subnet-xxxxxxxxxxxxxxxx | Security Groups are sg-xxxxxxxxxxxxxxxx | AZ is ap-northeast-1a

a. EFS DNS is fs-xxxxxxxxxxxxxxxx.efs.ap-northeast-1.amazonaws.com
b. EFS Mount Target details are as follows:

1.subnet-xxxxxxxxxxxxxxxx | ap-northeast-1a | fsmt-xxxxxxxxxxxxxxxx | 10.0.0.154 | sg-xxxxxxxxxxxxxxxx
2.subnet-xxxxxxxxxxxxxxxx | ap-northeast-1c | fsmt-xxxxxxxxxxxxxxxx | 10.0.3.128 | sg-xxxxxxxxxxxxxxxx
3.subnet-xxxxxxxxxxxxxxxx | ap-northeast-1d | fsmt-xxxxxxxxxxxxxxxx | 10.0.5.38 | sg-xxxxxxxxxxxxxxxx

c. Does File System Policy Exist for this EFS? False
d. PASSED: Security Groups associated with the EFS Mount target are configured to ALLOW Traffic from Instance.

---------------------
|  Mounting EFS  |
---------------------
Mount was SUCCESSFUL.

Verifying from /etc/mtab : 
fs-xxxxxxxxxxxxxxxx.efs.ap-northeast-1.amazonaws.com:/ /data nfs4 rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.0.0.228,local_lock=none,addr=10.0.0.154 0 0

 --------------------- 
 --- Auto Mounting --- 
 --------------------- 

If you need EFS to mount automatically on next boot, you can add the below lines in /etc/fstab.

fs-xxxxxxxxxxxxxxxx:/ /data efs _netdev  0 0
 OR 
fs-xxxxxxxxxxxxxxxx.efs.ap-northeast-1.amazonaws.com:/ /data nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0

You can Replace Filesystem ID with Mount target IP in the above lines when using Custom DNS. 

実際にマウントされたか EC2 インスタンスに接続して確認してみます。

sh-5.2$ ls -lha
total 36K
dr-xr-xr-x.  19 root root  249 Nov 18 04:50 .
dr-xr-xr-x.  19 root root  249 Nov 18 04:50 ..
lrwxrwxrwx.   1 root root    7 Jan 30  2023 bin -> usr/bin
dr-xr-xr-x.   5 root root  16K Nov 13 18:26 boot
drwxr-xr-x.   2 root root 6.0K Nov 18 02:53 data
drwxr-xr-x.  15 root root 3.0K Nov 18 03:00 dev

(中略)

MountPoint パラメータに指定したディレクトリ /data が作成されていました。

現在マウントされているファイルシステムの情報 /etc/mtab を確認してみます。

[root@ip-10-0-0-228 ~]# cat /etc/mtab
(中略)

/dev/xvda128 /boot/efi vfat rw,noatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=winnt,errors=remount-ro 0 0
fs-xxxxxxxxxxxxxxxx.efs.ap-northeast-1.amazonaws.com:/ /data nfs4 rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.0.0.228,local_lock=none,addr=10.0.0.154 0 0
tmpfs /run/user/0 tmpfs rw,seclabel,nosuid,nodev,relatime,size=97224k,nr_inodes=24306,mode=700 0 0

(中略)

マウントされていることが確認できますね。

さて、/etc/fstab はどうでしょうか?

[root@ip-10-0-0-228 ~]# cat /etc/fstab
#
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx     /           xfs    defaults,noatime  1   1
UUID=xxxx-xxxx        /boot/efi       vfat    defaults,noatime,uid=0,gid=0,umask=0077,shortname=winnt,x-systemd.automount 0 2

エントリーは追加されていません。

 --------------------- 
 --- Auto Mounting --- 
 --------------------- 

If you need EFS to mount automatically on next boot, you can add the below lines in /etc/fstab.

fs-xxxxxxxxxxxxxxxx:/ /data efs _netdev  0 0
 OR 
fs-xxxxxxxxxxxxxxxx.efs.ap-northeast-1.amazonaws.com:/ /data nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0

まとめ

AWS サポート自動化ワークフロー(SAW)はトラブルシューティングや修正作業を自動化し、効率的かつ一貫性のある問題解決を実現してくれます。
専門知識がなくても高度な対応がセルフサービスで可能です。
また、ベストプラクティスに基づいているため、運用コストの削減やセキュリティの向上にも寄与します。
自動化ワークフローの実行履歴が残るため、問題解決のプロセスがドキュメント化され、監査対応が容易になるといったメリットもあります。
トラブルシューティングにとどまらず、新しく作成した EFS を既存の複数台の EC2 インスタンスに対してマウントを行いたい場合などにもランブックを活用することができます。

本記事が誰かのお役に立てれば幸いです。

参考

https://aws.amazon.com/jp/premiumsupport/technology/saw/
https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-check-and-mount-efs.html

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.