박상권의 삽질블로그

[AWS]Lambda의 시작 - 'Hello World' 출력하기 본문

IT/AWS

[AWS]Lambda의 시작 - 'Hello World' 출력하기

박상권 2016. 5. 30. 08:56

안드로이드 개발자들이 모여있는 오픈채팅방에 참여해보세요 .
Q&A 및 팁을 공유하는 방입니다..
오픈채팅방 참여



블로그를 Medium으로 옮겨서 운영하고 있습니다.
앞으로 새로운 글은 모두 미디엄 블로그를 통해서 올릴 예정입니다.
미디엄에서 다양하고 유익한 포스팅을 살펴보세요
미디엄 블로그 보기




AWS Lambda의 소개 및 서버없이 Restful API서버구성을 만드는 방법이 궁금하시다면 아래 블로그부터 확인하시고 이 글을 따라오시길 권장합니다.

[IT/AWS] - [AWS]서버없이 Lambda와 API Gateway로 서버API 만들기







Lambda로 'Hello World' 출력하기


1. AWS콘솔에서 Lambda서비스로 이동합니다.


2. 처음 만드시는경우라면 [Get Started Now]버튼을 눌러 시작합니다.





이전에 Lambda function을 만든적이 있다면 [Create a Lambda function]을 클릭합니다.









3. 제일처음 우리를 맞이하는것은 blueprint라는 일종의 템플릿 개념입니다.

사람들이 많이 쓰일만한 패턴들의 소스코드들을 이미 템플릿으로 만들어져서 제공하고 있습니다.

가장 기본인 'hello world' 예제도 node.js, python용으로 미리 만들어져 있으며 S3, dynamodb, sns등 AWS자체의 서비스와 연동된 템플릿들도 제공을 합니다.

우리는 저돌적인 개발자이기때문에 쿨하게 [Skip]버튼을 눌러 직접 소스코드를 작성해보겠습니다.










4. 'Step2'가 제일 메인이 되는 부분의 페이지입니다.

Name이나 Description은 원하시는대로 작성해주시고 Runtime ( Node.js , Python, Java )에서 본인이 작성하길 원하는 언어의 코드를 선택해줍니다.

이 블로그에서는 Node.js(v0.10.42)를 기준으로 소스코드를 작성할 예정입니다.


아래 Lambda function code에서는 직접 소스코드를 작성할수도 있고, 미리 코딩한 파일을 zip파일형태로 업로드하거나 S3를 통해서 가져올수도 있습니다.

(저는 실제로 사용할때는 Webstorm을 이용해서 로컬에서 코딩을 끝내고 zip파일을 업로드 하고 있지만 이번 예제에서는 직접 코드를 입력하는 방식으로 진행하겠습니다)










5. 다른 설정들보다도 제일 중요한건 Lambda funtion code작성입니다.

아래의 코드는 API Gateway를 통해서 Lambda가 호출됐을때 'Hello World'를 출력해주는 가장 기본적인 코드입니다.





여기서 우리는 handler, event, context에 대해서만 알아두면 됩니다.



handler

handler함수가 Lambda funtion이 시작되는 메인 함수라고 보면 됩니다.

이 함수에 앞으로 설명할 event,context가 넘어오고 이를 우리가 컨트롤 해주어야 합니다.

http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html


event

Node.js에서 request의 개념으로 이해하시면 좋습니다.

Lambda가 실행되면서 전달되는 파라미터값들이 event를 통해서 넘겨받게 됩니다.

API Gateway와 연동될경우, GET, POST, PUT, DELETE 의 동작에서 넘겨지는 query, body, params등의 값들을 event에서 가져올 수 있습니다.


context

event가 request개념이었다면 context는 response개념으로 이해하시면 좋습니다.

context에서 결과로 리턴하는 함수는 done(), succeed(), fail()이 있습니다.



context.succeed(Object result);

결과가 성공했을때 리턴해주는 함수입니다.

여기서 Object는 json형식의 구조이어야 합니다. 

물론 result값을 넘겨주지않고 succeed()나 succeed(null)로도 리턴할 수 있습니다.



context.fail(Error error);

결과가 실패했을때 리턴해주는 함수입니다.

Error또한 값을 넘겨주지않고 사용할 수도 있습니다.

여기서 발생한 에러는 CloudWatch에 로그로 남겨지게 됩니다.



context.done(Error error, Object result);

결과가 성공이든 실패든 어떠한경우에도 쓰일수 있는 함수입니다.

첫번째 파라미터인 error가 null이라면 성공으로, 그렇지않다면 실패로 판단합니다.

여기서 error가 발생한경우는 fail()처럼 CloudWatch에 로그로 남겨지게 됩니다.

http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-using-old-runtime.html





만약 Node.js를 v0.10이 아니라 v4.3을 쓰게 된다면 위의 함수들이 아닌 callback()함수를 사용해야 합니다.

http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-using-old-runtime.html#transition-to-new-nodejs-runtime


succeed() -> callback()

// Old way (Node.js runtime v0.10.42).
context.succeed('Success message');  

// New way (Node.js runtime v4.3).
context.callbackWaitsForEmptyEventLoop = false; 
callback(null, 'Success message');  


fail() -> callback()

// Old way (Node.js runtime v0.10.42).
context.fail('Fail object');  

// New way (Node.js runtime v4.3).
context.callbackWaitsForEmptyEventLoop = false; 
callback('Fail object', 'Failed result'); 


done() -> callback()

// Old way (Node.js runtime v0.10.42).
context.done(null, 'Success message');  

// New way (Node.js runtime v4.3).
context.callbackWaitsForEmptyEventLoop = false; 
callback(null, 'Success message');  


Node.js v4.3부터 사용할 수 있는 callback()함수는 아래 링크에서 좀더 자세히 살펴 볼 수 있습니다.

http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html#nodejs-prog-model-handler-callback







위의 handler, event, context 개념을 잘 따라오셨다면 이제 'Hello World' 를 리턴하는 이 소스코드를 이해하실 수 있으실겁니다.









6. 소스코드 작성을 마쳤다면 아래에서 기타 설정들을 확인할 수 있습니다.





Handler

소스코드로 직접 작성할경우 이 파일이름이 index.js파일이 되는 개념이고 handler함수가 메인이기때문에 이 함수를 지정해줍니다.


Role

Lambda에서 S3나 Dynamodb처럼 다른 서비스에 접근해야하는 권한이 필요한경우 IAM Role을 만들어서 지정해주어야 합니다.

처음에는 만들어져있는 role이 없으므로 새로 하나 만들어주어야 합니다.

여기서는 가장 기본적인 [Basic execution role]을 선택하도록 하겠습니다.



그다음 화면에서 만드는 과정은 별다르게 건드릴필요 없이 [Allow] 버튼을 누르면 생성됩니다.



그 외로 메모리설정이나 타임아웃시간, VPC를 지정할 수 있지만 기본으로 설정되어있는 상태에서 [Next]를 눌러줍니다.






7. 이제 다 끝났습니다.

마지막으로 우리가 작성한 function내용을 확인하고 [Create funtion]을 눌러주면 완료됩니다.





8. 우리가 만든 Lambda function code를 테스트 해볼수도 있습니다.

event로 넘겨줄 값을 설정하고 [Save and test]버튼을 누르면 아래 이미지처럼 우리가 설정해둔 결과를 받아 볼 수 있습니다.











Lambda function code의 동작원리만 충분히 이해하신다면 기타 부가적인 설정들은 어렵지 않으실겁니다.

이번 포스팅에서는 가장 기본적인 코드들과 설정방법에 대해서 알아보았습니다.

Lambda와 API Gateway를 이용해서 서버없이 GET, POST, PUT, DELETE동작을 하는 Restful API를 구성하는 방법은 아래 포스팅을 참고하시면 됩니다.

[AWS]API Gateway - RESTful API만들기



감사합니다.






Comments