dev2015. 10. 2. 11:53

aws lambda 는 매우 씸플하다.

* AWS lambda 소개 : https://aws.amazon.com/ko/lambda/


사용 가능한 언어는 node.js 와 java8

일단 node.js 로 한 번 해보기로 했다.


* 하려는 작업

1. s3 의 지정된 bucket에 파일을 올림.

2. 해당 bucket에서 createObject 이벤트가 발생하여 lambda 를 호출.

3. lambda 에서는 key 를 파싱해서 해당 정보를 mysql 에 insert.


* 일단 lambda 를 살펴보자.

 - 람다에는 기본으로 제공하는 17개의 작업 템플릿이 있음. (2015년 10월 기준)

 - 해당 템플릿을 이용하면 웹에서 간단하게 코드를 수정 및 작업해서 처리가 가능함. (code inline)

 - db 관련된 건 dynamoDB 밖에 없다. ㅠ 즉, rds 는 템플릿이 없으므로 알아서 해야 함.


* 작업

1. 우선 lambda 콘솔로 이동.

2. create a lambda function

3. blueprint 선택 - s3와 이벤트를 쉽게 연결하기 위해 s3-get-object 를 선택

4. bucket, eventType 을 지정 - event type 은 이미지 추가될 때마다 조건 없이 할거니, object created (all) 로 지정함.

5. function name, description, runtime 지정. - node.js 로 지정함.

 + 별도 mysql 모듈을 사용해야 하기 때문에 안타깝게도 code inline 을 사용할 수가 없음. ㅠ,.ㅠ

 + code inline 으로 가능한 수준의 작업은 엄청 편하게 수정하고 적용을 확인할 수 있음.

 + 암튼, js 코드와 사용할 모듈을 zip으로 압축해서 업로드 해야 함.

 + 참고 코드 : https://github.com/ashiina/aws-lambda-rds-sample

 + 뭘 해야 할 지 잘 모르겠다면,
   a. 위 예제 코드에서 /myprocess/index.js 만 본인에게 맞게 수정한 후,
   b. 해당 index.js 와 node_modules 를 zip 파일로 압축.
   c. Lambda configure function 페이지에서 "upload a .zip file" 로 해당 zip 파일을 업로드.

6. role 을 만들어줘야 함. Role -> create new role -> S3 execution role

7. create function

8. 생성한 function 에 들어가서 test 를 해볼 수 있음.

9. 테스트가 완료되면 s3에 걸려있는 이벤트를 enabled 로 설정해주면 완료!


스샷을 같이 넣어주면 참 좋은데... 귀찮아서... ㅠ,.ㅠ


* IP를 기준으로 ACL 제어하는 경우, Lambda call 의 접근 제한 이슈.

 - mysql 서버에 IP를 기준으로 ACL 설정을 해뒀는데, lambda 콜로 들어오는 ip는 가늠할 수가 없다.

 - 그렇다고 db 서버의 ip ACL을 모두 열어버릴 수도 없으니 곤란하다.

 - dynamoDB 의 경우에는 이러한 ACL 제약 없이 Lambda와 원활한 연동이 가능한 것으로 보임.

 - aws api gateway 를 이용해서 하는 수 밖에 없다는 글을 봤는데, 더 찾아봐야 할 듯. ㅠ.ㅠ


* 람다로 호출되는 IP는 따로 지정되어 있지 않음. AWS의 ec2 대역으로 ACL 처리하면 됨. (내용추가)

  + https://ip-ranges.amazonaws.com/ip-ranges.json


* reference

 - aws lambda pricing : https://aws.amazon.com/ko/lambda/pricing/

 - http://ashiina.github.io/2015/01/amazon-lambda-first-impression/

 - http://stackoverflow.com/questions/31809890/can-aws-lambda-connect-to-rds-mysql-database-and-update-the-database

 - https://github.com/felixge/node-mysql/

 - AWS Lambda를 이용하여 S3 업로드된 파일 metadata 변경 : http://blog.naver.com/relax_xaler/220420745050

 - Is it possible to use a ec2 security group for lambda : https://forums.aws.amazon.com/thread.jspa?messageID=609503&#609503

 - AWS의 ip 대역 : http://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html