AWS Lambda から Amazon EFS へのアクセス


AWS Lambda から Amazon EFS へアクセスできるようになったとのことでやってみた。

これによりLambda の仕様上、512 MB という仕様制限がありましたが、これを超えるファイルの操作が可能になります。

また、S3は結果整合性ですが、EFS を利用することによりデータの一貫性が保てることができます。

新機能 – Lambda関数の共有ファイルシステム – Amazon Elastic File System for AWS Lambda

1.セキュリティグループの作成

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

セキュリティグループ
インバウンドルール なし
アウトバウンドルール すべてのトラフィック

Amazon EFS 用セキュリティグループの作成

セキュリティグループ
インバウンドルール NFS,TCP,2049,AWS Lambda のセキュリティグループID
アウトバウンドルール すべてのトラフィック

2.Amazon EFS の作成

ステップ 1: ネットワークアクセスを設定する

AWS Lambda を作成する対象の VPC を選び、マウントターゲットでサブネットを選択。
セキュリティグループには、「Amazon EFS 用セキュリティグループの作成」で作成したsgを選択します。

ステップ 2: ファイルシステムの設定を行う

今回は、AWS Lambda から Amazon EFS のアクセスを確認することが目的なので、タグだけを追加し、他の設定はデフォルトでいきます。

ステップ 3: クライアントアクセスを設定

AWS Lambda からアクセスするための アクセスポイントの作成 を行います。

ステップ 4: 確認と作成

「ファイルシステムの作成」をクリック。

3.AWS Lambda の作成

IAM ロールの作成

AWS Lambda 関数に付与する IAM ロールを作成する。
 AWSLambdaVPCAccessExecutionRole
 AmazonElasticFileSystemClientReadWriteAccess
 CloudWatchLogsFullAccess

AWS Lambda 関数の作成

ランタイムはPython3.8、既存のロールは「IAM ロールの作成」で作成したものを指定します。

VPCとセキュリティグループは、「AWS Lambda 用セキュリティグループの作成」で作成していたものを指定します。

さて、今回のメインはここで、ファイルシステムの追加をします。「Amazon EFS の作成」で作成したAmazon EFS 及びアクセスポイント、ローカルマウントポイントを指定します。

次の通りLambda関数を作成します。
AWS Lambda から Amazon EFS 上にファイル efslambda.txt を作成、書き込、保存。

file_path = '/mnt/data/'

def lambda_handler(event, context):
    file_name = 'efslambda.txt'
    write_string = event['text']

    with open(file_path + file_name, mode='w') as f:
        f.write(write_string)

    with open(file_path + file_name) as f:
        print(f.read())

4.テスト

lambdaよりテストイベントを実行する。

{
  "text": "This in lambda"
}