EFS を Lambda で使用する

AWS マネジメントコンソールで Amazon EFS のアクセスポイントを作成して AWS Lambda から使用する手順をまとめました。

EFS を Lambda で使用する際の前提

以下の記事で作成した Amazon EFS を前提にした手順となります。
「ファイルシステムポリシー」は、特に何も設定してません。

EFS を Lambda で使用する手順

Lambda 関数用のセキュリティーグループ作成

  • インバウンドルール
    • EFS を使用する上で特に設定する必要はありません。未設定でも大丈夫です。
  • アウトバンドルール
    • デフォルトのアウトバウンドルールを使用し、すべてのトラフィックを許可しておきます。

マウントターゲット用のセキュリティーグループの更新

  • インバウンドルール
    タイプ プロトコル ポート範囲 ソース
    NFS TCP 2049 Lambda 関数用に作成したセキュリティーグループ

アクセスポイント作成

アクセスポイントを作成します。

[ユーザー ID] や [グループ ID] は Lambda のドキュメント1 を参考に 1001 にしています。

アクセスポイント作成 1

アクセスポイント作成 2

Lambda 関数の作成

EFS に アクセスするため、Lambda 関数は VPC に設置します。
設置する VPC は EFS を設置した VPC を選択します。
サブネットは EFS のマウントターゲットと同じサブネットを選択します。
セキュリティーグループは先ほど Lambda 関数用に作成したセキュリティーグループを選択します。
因みに、今回サンプルとして使用している EFS は「ファイルシステムポリシー」は未設定のため、こちらのドキュメントに書かれている elasticfilesystem:ClientMount などのアクセス許可は必要ありません。

Lambda 関数の作成

ファイルシステムの追加

EFS をファイルシステムとして追加します。

ファイルシステム

先ほど作成したアクセスポイントを選択します。
ローカルマウントパスは /mnt/efs/ とします。

ファイルシステムの追加

動作確認

ローカルマウントパスとして指定した /mnt/efs/ にファイルを作成してみます。
特にエラーが発生せず、実行結果のログに作成したファイル名が表示されていれば成功です。

Copied!
import json
import os

def lambda_handler(event, context):

    f = open('/mnt/efs/sample.txt', 'w')
    f.write('test')
    f.close()
    filenames = [f.name for f in os.scandir("/mnt/efs")]
    print(filenames)

実行結果

Footnotes

  1. Lambda 関数のファイルシステムアクセスの設定 - AWS Lambda