【AWS】Lambda with EFSの構築

## きっかけ
- Lambdaで/tmp上限の５００MBを超えるファイルを扱う必要があり、その動作確認のため。

## 構築Step
1. VPCの構築、SG等の設定
1. EFS構築、アクセスポイントの設定
1. Lambda構築、設定、動作確認

### 1. VPCの構築
- 適当なVPCを作成
![スクリーンショット 2022-01-10 0.05.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/3383c865-f5b8-e3cc-b62f-fe8393c5340e.png)

- DNSホスト名を有効化
![スクリーンショット 2022-01-10 0.05.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/f211a718-78a3-74c4-059b-7256fe092938.png)

- 適当なサブネットを作成
![スクリーンショット 2022-01-10 0.05.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/2cd425b4-a0e0-5e2b-20c3-8783009c96fc.png)

- Lambda用SGを作成
![スクリーンショット 2022-01-10 0.06.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/f789adbc-abaa-f63b-7da0-283ddc1e4604.png)

- EFS用SGを作成
 - インバウンドルールに上記で作成したSGを設定
![スクリーンショット 2022-01-10 0.07.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/c01a075b-be9a-67ea-17e6-86f01db1a62f.png)

- Lambda用IAMロールを作成
 - AWSLambdaVPCAccessExecutionRole, AmazonElasticFileSystemClientReadWriteAccessは必要
![スクリーンショット 2022-01-10 0.09.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/4e8c524e-98ca-d2d2-921c-166cc275b0b0.png)

### 2. EFSの構築、アクセスポイントの設定
- EFSで上記で作成したVPCを選択、カスタマイズを押下
![スクリーンショット 2022-01-10 0.11.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/54f11575-0321-c34e-2ded-5ecc8853233f.png)

- NW設定でSGを上記で作成したEFS用SGを設定
![スクリーンショット 2022-01-10 0.11.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/39f0842e-00dd-8af0-daad-027f2fddb856.png)

- アクセスポイントを作成
![スクリーンショット 2022-01-10 0.12.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/f1d57cfa-b854-16b6-d9a8-f3356330a35a.png)
![スクリーンショット 2022-01-10 0.13.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/acd7ba5f-3252-3ef8-e579-bf5da3461b4b.png)

### 3. Lambda構築、設定、動作確認
- Lambdaを構築
　-  ロール設定を上記で作成したIAMロールに設定
![スクリーンショット 2022-01-10 0.15.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/2874e9ab-f870-1c08-cc60-940cc941396b.png)

- LambdaのVPC設定で上記で作成したVPC,サブネットに設定
![スクリーンショット 2022-01-10 0.15.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/01c6b2fb-20d0-701c-cbf5-1f146e7f1a06.png)

- Lambdaのファイルシステム設定で作成したEFSアクセスポイントに設定
![スクリーンショット 2022-01-10 0.18.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/5ae94476-a926-14d4-2c8d-137cb27957b2.png)

- LambdaにEFSのマウントパス先にファイル作成するコードを記載、デプロイ
![スクリーンショット 2022-01-10 0.25.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/18e072d0-8026-65d7-6b50-ea6a8d81cd0f.png)

```lambda_function.py
file_path = '/mnt/efs/'

def lambda_handler(event, context):
    file_name = 'test-efs.txt'
    write_string = 'test-efs'

    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())
```

- テストを押下し、正常終了することを確認
![スクリーンショット 2022-01-10 0.25.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/df664a96-c01b-afb2-388a-7ae92f8ff9c4.png)

- EC2からEFSにアクセスし、想定通りにファイル、コンテンツが作成されていることを確認
![スクリーンショット 2022-01-10 0.38.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/e75cf094-3e24-27de-55de-fc39052b4a5e.png)
 - EC2にEFSをマウントする方法については過去記事参照

https://qiita.com/kei1-dev/items/3fa6c1c05e0c0a4ade48
   

## 参考URL

https://blog.serverworks.co.jp/tech/2020/06/22/aws-lambda-support-for-amazon-elastic-file-system-now-generally/