[AWS Lambda] AWS EFS를 Lambda 저장소로 사용하기 본문

AWS/Lambda

[AWS Lambda] AWS EFS를 Lambda 저장소로 사용하기

최재강 2020. 11. 5. 17:49

1. EFS 생성

일단은 efs와 연결할 것인데, efs가 당연히 있어야 하므로 생성합니다.

vpc는 특별한 사항이 아니면 default vpc를 이용하고 2번째 단계도 모두 디폴트 값으로 넘어갑니다.

위 그림이 중요하다. 이 부분 때문에 정말 많은 시간이 소요 되었었습니다.

보안적으로 빡빡하게 할 것이 아니라면, 체크박스를 모두 건너뛰고 Set policy를 합니다.

알아서 잘 생성해준다. 그리고 access points를 생성해줍니다.

access point는 로컬 디렉토리가 efs 디렉토리와 연결될 수 있도록 access end point를 제공합니다.

저는 위와 같이 했습니다. 여기서 주의할 점은 Directory에 경로를 단지 '/' (root 디렉토리)로 하면, 접근할 때 permission denied라는 메세지와 함께 접근할 수 없다. 이것을 몰랐던 저는 다른 부분 (보안 그룹, iam 설정 등등..) 에만 신경쓰며 엄청난 시간을 소요했었습니다.

2. Lambda와 연결

lambda에서 efs를 파일 저장소 로서 쓰려면 조건이 있습니다.

바로 두 요소 모두 같은 vpc에 있어야 한다는 점입니다.

기존에는 없던 File system이라는 section이 람다 구성에 새로 생겼습니다.

default vpc에서 efs를 생성했으므로, 똑같이 default vpc를 할당해 줍니다.

보안그룹에 default vpc에 대한 보안그룹을 꼭 넣습니다.

기존에 생성 했던 file system을 선택하고, access point를 지정해 줍니다.

로컬 경로를 지정해 준다. /mnt 라는 path로 시작해야 하는 것이 rule인 듯 합니다.

3. Iam role 설정

이제 마무리 작업으로 lambda에 알맞은 정책을 부여하면 됩니다.

AWSLambdaVPCAccessExecutionRole 정책과 AmazonElasticFileSystemFullAccess 정책을 꼭 부여해야 합니다.

4. DynamoDB 연결을 위한 NAT Gateway 설정

lambda가 특정 vpc에 포함되지 않고 전역으로 존재할 때에는 설정할 필요가 없습니다.

이번 실험에서는 efs를 위해 lambda가 efs와 같은 vpc에 있어야 하여 특정 vpc에 포함되어 있는 상태 입니다.

이 경우, DynamoDB에 접근하기 위해 nat gateway로 lambda가 인터넷에 접근할 수 있는 설정이 필요합니다.

1. Subnet 생성

각각 private, public의 역할을 맡을 Subnet을 2개 생성합니다.

2. NAT Gateway 생성

NAT Gateway를 생성합니다. 이때 Subnet을 private Subnet과 연결합니다.

Allocate Elastic IP address 버튼을 클릭하여 Elastic IP를 할당합니다.

3. Internet Gateway

기존에 default Internet gateway를 사용합니다.

만약 없다면 생성합니다.

4. Route Table 생성

각각 private, public Subnet과 연결할 Route Table을 생성합니다.

5. Route Table과 Subnet 연결

먼저 public Subnet으로 만들 Subnet에서 Edit routes 버튼을 클릭합니다.

기존에 있던 Destination에서 Add route를 하고, "0.0.0.0/0"을 입력합니다. Target은 앞서 보았던 Internet Gateway를 선택하고 Save routes를 합니다.

동일한 방법으로 private Subnet 또한 Edit routes를 합니다. private Subnet에는 앞서 만들었던 NAT Gateway를 Target으로 설정합니다.

이제 다시 Lambda 설정으로 돌아와서, VPC 설정 부분에 들어옵니다.

기존에 설정했던 Subnet들을 없애고, 새롭게 만든 private Subnet을 lambda에 부여합니다.

(기존에 있던 것을 놔두고 추가적으로 private Subnet을 추가했더니 안되더군요)

Comments