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"
}