EFS を Lambda で使用する
AWS マネジメントコンソールで Amazon EFS のアクセスポイントを作成して AWS Lambda から使用する手順をまとめました。
EFS を Lambda で使用する際の前提
以下の記事で作成した Amazon EFS を前提にした手順となります。
「ファイルシステムポリシー」は、特に何も設定してません。
EFS を Lambda で使用する手順
Lambda 関数用のセキュリティーグループ作成
- インバウンドルール
- EFS を使用する上で特に設定する必要はありません。未設定でも大丈夫です。
- アウトバンドルール
- デフォルトのアウトバウンドルールを使用し、すべてのトラフィックを許可しておきます。
マウントターゲット用のセキュリティーグループの更新
- インバウンドルール
タイプ プロトコル ポート範囲 ソース NFS TCP 2049 Lambda 関数用に作成したセキュリティーグループ
アクセスポイント作成
アクセスポイントを作成します。
[ユーザー ID] や [グループ ID] は Lambda のドキュメント1 を参考に 1001
にしています。
Lambda 関数の作成
EFS に アクセスするため、Lambda 関数は VPC に設置します。
設置する VPC は EFS を設置した VPC を選択します。
サブネットは EFS のマウントターゲットと同じサブネットを選択します。
セキュリティーグループは先ほど Lambda 関数用に作成したセキュリティーグループを選択します。
因みに、今回サンプルとして使用している EFS は「ファイルシステムポリシー」は未設定のため、こちらのドキュメントに書かれている elasticfilesystem:ClientMount
などのアクセス許可は必要ありません。
ファイルシステムの追加
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
個人開発したサービス