ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS Lambda로 랜덤아재개그 카카오 플러스친구 만들기 2편 | Lambda Function 구성하기
    Serverless 2018. 10. 28. 11:21

    AWS Lambda 함수 생성


    람다 함수를 생성합시다


    Author from scratch를 선택하여 처음부터 코드를 작성할 수도 있지만

    Blueprints에서 도움을 받을 수도 있습니다.

    HTTP API를 만들어야 하니까 nodejs, api-gateway라고 검색해서 나오는 microservice-http-endpoint를 선택합니다




    기본적인 정보들을 채워넣고

    API gateway 항목도 채워 넣습니다.

    우리 API는 카카오에서 사용할 것이기 때문에 Security를 일단, Open으로 선택합니다.


    기본적인 코드 템플릿이 있는데, 나중에 얼마든지 수정할 수 있으니 일단은 넘어갑시다

    Create function을 누릅니다!



    그러면 random-dad-joke라는 람다 함수가 가운데 있고

    왼쪽에는 API Gateway, 오른쪽에는 CloudWatch Logs가 있습니다.

    API Gateway로부터 요청을 받아서 실행이 되고 CloudWatch에 로그를 남긴다는 뜻입니다.




    템플릿 Code 파악


    console.log('Loading function');
    
    const doc = require('dynamodb-doc');
    
    const dynamo = new doc.DynamoDB();
    
    exports.handler = (event, context, callback) => {
        //console.log('Received event:', JSON.stringify(event, null, 2));
    
        const done = (err, res) => callback(null, {
            statusCode: err ? '400' : '200',
            body: err ? err.message : JSON.stringify(res),
            headers: {
                'Content-Type': 'application/json',
            },
        });
    
        switch (event.httpMethod) {
            case 'DELETE':
                dynamo.deleteItem(JSON.parse(event.body), done);
                break;
            case 'GET':
                dynamo.scan({ TableName: event.queryStringParameters.TableName }, done);
                break;
            case 'POST':
                dynamo.putItem(JSON.parse(event.body), done);
                break;
            case 'PUT':
                dynamo.updateItem(JSON.parse(event.body), done);
                break;
            default:
                done(new Error(`Unsupported method "${event.httpMethod}"`));
        }
    };
    


    코드를 살펴봅시다

    API Gateway에서 요청을 받으면 아마존 DynamoDB에서 데이터를 가져와서 돌려주거나,

    DynamoDB에 데이터를 넣는 코드입니다.




    템플릿 Code 간소화


    저는 DB를 안 쓸 생각이기 때문에 일단 DynamoDB관련 코드를 지우겠습니다.

    그리고 http method도 GET이랑 POST만 쓸 예정이기 때문에 나머지는 지우겠습니다.

    그럼 아래와 같이 간단해집니다.


    exports.handler = (event, context, callback) => {
        const done = (err, res) => callback(null, {
            statusCode: err ? '400' : '200',
            body: err ? err.message : JSON.stringify(res),
            headers: {'Content-Type': 'application/json; utf-8'},
        });
    
        switch (event.httpMethod) {
            case 'GET':
                done(null, 'success get');
                break;
            case 'POST':
                done(null, 'success post');
                break;
            default:
                done(new Error(`Unsupported method "${event.httpMethod}"`));
        }
    };
    



    실행


    여기까지 실행시켜볼까요?

    1단계는 Lambda에서 자체 테스트하는 것이고,

    2단계로는 Api gateway를 통해서 호출해봅시다.



    그림으로 설명하자면, 

    1단계는 API Gateway와 AWS Lambda 사이에 있는 가장 오른쪽 화살표를 테스트하는 것이고,

    2단계는 좀 더 확장해서 API Gateway로 들어오는 화살표부터 테스트하는 것이라고 할 수 있습니다.



    실행1: Lambda Test


    먼저 1단계부터 해봅시다

    Save 버튼을 눌러 저장하신 후 Test버튼을 눌러봅시다.


    처음하는 Test라서 test event부터 만들라고 팝업이 뜹니다.

    뭔가 값들이 굉장히 많죠..?

    실제로 API Gateway로 HTTP요청이 들어오면, API Gateway는 저런 형태의 값들을 람다 함수로 보냅니다.

    복잡하지만 일단 httpMethod만 확인해보죠. POST입니다.


        case 'POST':
            done(null, 'success post');
            break;


    아까 위와 같이 코드를 작성했고 httpMethod가 POST니까 응답으로 success post가 떨어지겠죠??

    확인해봅시다.



    test event를 만드시면 원래 화면으로 돌아옵니다.

    Test버튼을 한 번 더 클릭하시면 함수가 실행됩니다.

    success post라는 응답이 잘 나오네요.



    실행2: HTTP Call


    그럼 API Gateway를 통해서 Http로 요청해봅시다. 

    아주 간단합니다.

    API Gateway 선택하신 후에

    endpoint 링크를 클릭하시면 됩니다.

    success get이라는 응답을 확인하실 수 있습니다.




    Next


    다음 편에서는 URL에 따라서 다른 동작을 하게 만들어봅시다





    댓글

Designed by black7375.