Amazon LightsailからEFSをマウントしてみた

2023.07.21

Amazon LightsailからEFSをマウントする機会があったのでブログに残します。

やること

ブログのタイトル通りですが、Amazon LightsailからEFSをマウントします。
Amazon LightsailはRDSやEFSのようなVPC内にあるリソースを使用するのにVPCピアリングを行う必要があります。
Amazon Lightsail の外部の AWS リソースを使用するために Amazon VPC ピア接続をセットアップする
なのでメイン作業としてはLightsailの作成とVPCピアリングの設定です。
EFSのマウント自体はNFSでEC2と同じようにマウントを行います。
IP アドレスを使用してマウントする

リソース作成

Lightsail作成

まずはLightsailを作成します。
LightsailはCloudFormation使用して作成しました。

参考ブログ:[アップデート] Amazon LightsailがCloudFormationに対応したのでYAMLでWordPress環境を作ってみた

CloudFormationテンプレート (ここをクリックしてください)
AWSTemplateFormatVersion: "2010-09-09"

Description: Lightsail Stack

Resources:
  WordPressServer: 
    Type: AWS::Lightsail::Instance
    Properties:
      BlueprintId: amazon_linux_2023
      BundleId: nano_2_0
      InstanceName: al2023

AWS::Lightsail::Instance
BlueprintIdとBundleIdは以下のAWS CLIコマンドで確認することが可能です。

# BlueprintId
aws lightsail get-blueprints

# BundleId
aws lightsail get-bundles

デプロイは以下のコマンドを実行しました。

aws cloudformation create-stack --stack-name CloudFormationスタック名 --template-body file://CloudFormationテンプレートファイル名

デプロイが完了すると以下の画像のように「al2023」というインスタンス名でLightsailが作成されます。

VPCピアリング

次はVPCピアリングを設定していきます。
設定は以下のドキュメントの手順で行います。
Amazon Lightsail の外部の AWS リソースを使用するために Amazon VPC ピア接続をセットアップする

まずは、Lightsailのコンソールへ移動します。
移動したら画面右上にある「Account」をクリックして移動します。

移動後、AWSアカウントや現在使用しているIAMユーザーなどの情報が表示されるので、その画面の「Advanced」をクリックします。

クリック後、画面中央にある「Enable VPC peering」にチェックを付けます。

「Enable VPC peering」にチェックを付けたらVPCのダッシュボードからピアリング接続を確認するとデフォルトのVPCに対して設定が行われていることが確認できます。

EFS作成

次はEFSを作成します。
EFSはデフォルトVPC内のサブネットを使用して作成します。
以下のCloudFormationテンプレートで作成しました。

CloudFormationテンプレート (ここをクリックしてください)

AWS::EFS::FileSystem
EFSの作成自体で特別なことは行っていません。
EFSのセキュリティグループの作成時にLightsailのプライベートIPを設定するようにしています。
LightsailのプライベートIPはマネジメントコンソールから確認することが可能です。

aws cloudformation create-stack --stack-name CloudFormationスタック名 --template-body file://CloudFormationテンプレートファイル名 --parameters ParameterKey=Vpcid,ParameterValue=デフォルトVPC ID ParameterKey=Subnet1,ParameterValue=デフォルトVPCのサブネットID ParameterKey=Subnet2,ParameterValue=デフォルトVPCのサブネットID ParameterKey=LightsailIP,ParameterValue=LightsailのプライベートIP/32

デプロイが完了するとEFSのダッシュボードからファイルシステムを確認することが出来ます。

マウント

リソース作成が完了したら実際にマウントします。
まずはEFSのマウントコマンドを確認します。
マネジメントコンソールから作成したEFSファイルシステムの詳細を開きます。
開いたら画面右上にあるアタッチをクリックします。

クリックしたら「IP経由でマウント」をクリックしてコマンドを確認します。
赤枠で囲った部分がマウントコマンドになります。

マウントコマンドを確認したらLightsailで実行します。
作成したLightsailインスタンスの画面から「Connect Using SSH」をクリックするとブラウザから接続することが出来ます。

接続したら以下のコマンドでマウントポイントを作成します。

sudo mkdir /mnt/efs

マウントポイントを作成したら上記手順で確認したコマンドのマウントポイント部分を変更して実行します。

sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport EFSマウントターゲットIP:/ /mnt/efs

マウントコマンドを実行してエラーなどが出力されなければ以下のコマンドでマウントされていることを確認できます。

df -h

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs           224M     0  224M   0% /dev/shm
tmpfs            90M  1.6M   88M   2% /run
/dev/xvda1       20G  1.6G   19G   8% /
tmpfs           224M     0  224M   0% /tmp
tmpfs            45M     0   45M   0% /run/user/1000
172.31.77.36:/  8.0E     0  8.0E   0% /mnt/efs

さいごに

Lightsailを使用していて、外部ストレージが欲しくなった際にEFSを簡単にマウントできることが分かりました。
ただし、LightsailのVPCピアリングで使用できるVPCがデフォルトのVPCだけなのが少し不便だと思いました。