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򔳟
- AWS의 ip 대역 : http://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html
'dev' 카테고리의 다른 글
eclipse 에서 maven 프로젝트 환경 설정 - mvn eclipse:eclipse (0) | 2015.11.19 |
---|---|
classpath*: vs classpath: (0) | 2015.11.13 |
jenkins timezone 변경하기 (0) | 2015.10.02 |
aws ec2에 jenkins 설치하기 (0) | 2015.08.18 |
CORS (Cross-Origin Resource Sharing) (0) | 2015.08.13 |