이 모듈에서는 AWS Lambda 및 Amazon DynamoDB를 사용하여 웹 애플리케이션에 대한 요청을 처리하는 백엔드 프로세스를 구축해 봅니다. 첫 번째 모듈에서 배포한 브라우저 애플리케이션을 사용하면 사용자가 원하는 위치로 유니콘을 보내도록 요청할 수 있습니다. 이 같은 요청을 처리하려면 브라우저에서 실행되는 JavaScript가 클라우드에서 실행 중인 서비스를 호출해야 합니다.

Serverless_Web_App_LP_assets-04

사용자가 유니콘을 요청할 때마다 호출되는 Lambda 함수를 구현합니다. 이 함수는 플릿에서 유니콘을 선택하고, DynamoDB 테이블에 요청을 기록한 후, 보내는 유니콘에 대한 세부 정보로 프런트엔드 애플리케이션에 응답합니다.

이 함수는 브라우저에서 Amazon API Gateway를 사용하여 호출됩니다. 해당 연결은 다음 모듈에서 구현합니다. 이 모듈에서는 격리된 환경에서 함수를 테스트합니다.

모듈 소요 시간: 30분

사용된 서비스: AWS Lambda, Amazon DynamoDB


아래의 단계별 지침에 따라 서버리스 백엔드 프로세스를 생성합니다. 섹션을 확장하려면 각 단계 번호를 클릭하십시오.

  • 1단계. Amazon DynamoDB 테이블 생성

    Amazon DynamoDB 콘솔을 사용하여 새 DynamoDB 테이블을 생성합니다. 테이블을 Rides라고 부르고 RideId라는 파티션 키와 문자열 유형을 부여합니다. 테이블 이름과 파티션 키는 대/소문자를 구분합니다. 따라서 정확한 ID를 입력하십시오. 다른 모든 설정에는 기본값을 사용합니다.

    테이블을 생성한 후 다음 단계에서 사용할 수 있도록 ARN을 기록해 둡니다.


    1. AWS Management Console에서 Services(서비스)를 선택한 후 Databases(데이터베이스)에서 DynamoDB를 선택합니다.

    2. Create table(테이블 생성)을 선택합니다.

    3. Rides테이블 이름에 입력합니다. 이 필드는 대/소문자를 구분합니다.

    4. RideIdPartition key에 입력하고 키 유형으로 String을 선택합니다. 이 필드는 대/소문자를 구분합니다.

    5. Use default settings(기본 설정 사용) 확인란을 선택하고 Create(생성)를 선택합니다.

    6. 새 테이블의 Overview(개요) 섹션에서 맨 아래로 스크롤한 후 ARN을 기록해 둡니다. 이 값은 다음 섹션에서 사용하게 됩니다.

  • 2단계. Lambda 함수에 대한 IAM 역할 생성

    모든 Lambda 함수에는 IAM 역할이 할당되어 있습니다. 이 역할은 함수가 상호 작용할 수 있는 다른 AWS 서비스를 정의합니다. 이 워크숍에서는 Amazon CloudWatch 로그에 로그를 기록할 권한과 DynamoDB 테이블에 항목을 쓸 수 있는 액세스 권한을 Lambda 함수에 부여하는 IAM 역할을 생성해야 합니다.

    IAM 콘솔을 사용하여 새 역할을 생성합니다. 이름을 WildRydesLambda라고 지정하고 역할 유형으로 AWS Lambda를 선택합니다. Amazon CloudWatch Logs에 데이터를 쓰고 DynamoDB 테이블에 항목을 추가할 수 있는 권한을 함수에 부여하는 정책을 연결해야 합니다.

    AWSLambdaBasicExecutionRole이라는 관리형 정책을 이 역할에 연결하여 필요한 CloudWatch Logs 권한을 부여합니다. 또한, 이전 섹션에서 생성한 테이블에 대해 ddb:PutItem 작업을 허용하도록 역할에 사용자 지정 인라인 정책을 생성합니다.


    1. AWS Management Console에서 Services(서비스)를 클릭한 후 Security, Identity & Compliance(보안, 자격 증명 및 규정 준수) 섹션에서 IAM을 선택합니다.

    2. 왼쪽 탐색 표시줄에서 Roles(역할)를 선택한 후 Create New Role(새 역할 생성)을 선택합니다.

    3. AWS service 그룹에서 역할 유형으로 Lambda를 선택한 후 Next: Permissions를 클릭합니다.

      참고: 역할 유형을 선택하면 AWS 서비스가 사용자를 대신해 이 역할을 수행할 수 있도록 허용하는 이 역할에 대한 트러스트 정책이 자동으로 생성됩니다. CLI, AWS CloudFormation 또는 다른 메커니즘을 사용하여 이 역할을 생성하는 경우 트러스트 정책을 직접 지정합니다.

    4. Filter 텍스트 상자에 AWSLambdaBasicExecutionRole을 입력하고 해당 역할 옆에 있는 확인란을 선택합니다.

    5. Next Step을 선택합니다.

    6. Role NameWildRydesLambda를 입력합니다.

    7. Create Role을 선택합니다.

    8. Roles 페이지의 필터 상자에 WildRydesLambda를 입력하고 방금 생성한 역할을 선택합니다.

    9. [Permissions] 탭에서 오른쪽 아래 모서리에 있는 Add inline policy 링크를 선택하여 새로운 인라인 정책을 생성합니다.

    10. Choose a service를 선택합니다.

    11. Find a service라는 검색 상자에 DynamoDB라고 입력하기 시작하고 DynamoDB가 표시되면 DynamoDB를 선택합니다.

    12. Select actions를 선택합니다.

    13. Filter actions라는 검색 상자에 PutItem를 입력하기 시작하고 PutItem이 표시되면 PutItem 옆에 있는 확인란을 선택합니다.

    14. Resources 섹션을 선택합니다. 

    15. Specific 옵션이 선택된 상태에서 table 섹션에서 [Add ARN] 링크를 선택합니다.

    16. 이전 섹션에서 생성한 테이블 ARN을 Specify ARN for table 필드에 붙여넣은 후 Add를 선택합니다.

    17. Review policy를 선택합니다.

    18. 정책 이름에 DynamoDBWriteAccess를 입력하고 Create policy를 선택합니다.

  • 3단계. 요청 처리를 위한 Lambda 함수 생성

    AWS Lambda는 HTTP 요청과 같은 이벤트의 응답으로 코드를 실행합니다. 이 단계에서는 웹 애플리케이션에서 발생하는 API 요청을 처리하여 유니콘을 보내는 핵심 함수를 구축합니다. 다음 모듈에서는 Amazon API Gateway를 사용하여 사용자의 브라우저에서 호출 가능한 HTTP 엔드포인트를 노출할 RESTful API를 생성합니다. 그런 다음 이 단계에서 생성한 Lambda 함수를 해당 API에 연결하여 웹 애플리케이션을 위해 완벽하게 작동하는 백엔드를 만듭니다.

    AWS Lambda 콘솔을 사용하여 RequestUnicorn이라는 새로운 Lambda 함수를 생성합니다. 이 함수는 API 요청을 처리하게 됩니다. 제공된 requestUnicorn.js 예제 구현 파일을 함수 코드에 사용합니다. 해당 파일을 복사해 AWS Lambda 콘솔의 편집기에 붙여 넣으면 됩니다.

    함수가 이전 섹션에서 생성한 WildRydesLambda IAM 역할을 사용하도록 해야 합니다.


    1. Services를 선택한 후 [Compute] 섹션에서 Lambda를 선택합니다.

    2. Create Function을 클릭합니다.

    3. 기본 Author from scratch 카드가 선택된 대로 둡니다.

    4. Name 필드에 RequestUnicorn을 입력합니다.

    5. Runtime으로 Node.js 6.10을 선택합니다.

    6. Role 드롭다운 메뉴에 Choose an existing role을 선택되어 있는지 확인합니다.

    7. Existing Role 드롭다운 메뉴에서 WildRydesLambda를 선택합니다.

    8. Create Function을 클릭합니다.

    9. Function code 섹션까지 아래로 스크롤한 후 index.js 코드 편집기에서 기존 코드를 requestUnicorn.js 콘텐츠로 교체합니다.

    10. 해당 페이지의 오른쪽 위 모서리에 있는 Save를 클릭합니다.

  • 4단계. 구현 테스트

    이 모듈에서는 AWS Lambda 콘솔을 사용하여 구축한 함수를 테스트합니다. 다음 모듈에서는 첫 번째 모듈에서 배포한 브라우저 기반 애플리케이션에서 함수를 호출할 수 있도록 API Gateway에 REST API를 추가합니다.


    1. 함수의 기본 편집 화면에 있는 Select a test event... 드롭다운 메뉴에서 Configure test event를 선택합니다.

    2. Create new test event가 선택된 대로 둡니다.

    3. Event name 필드에 TestRequestEvent를 입력합니다.

    4. 다음 테스트 이벤트를 복사해 편집기에 붙여넣습니다.

    {
        "path": "/ride",
        "httpMethod": "POST",
        "headers": {
            "Accept": "*/*",
            "Authorization": "eyJraWQiOiJLTzRVMWZs",
            "content-type": "application/json; charset=UTF-8"
        },
        "queryStringParameters": null,
        "pathParameters": null,
        "requestContext": {
            "authorizer": {
                "claims": {
                    "cognito:username": "the_username"
                }
            }
        },
        "body": "{\"PickupLocation\":{\"Latitude\":47.6174755835663,\"Longitude\":-122.28837066650185}}"
    }
    1. Create를 클릭합니다.

    2. 기본 함수 편집 화면에서 Test를 클릭합니다. 이때 드롭다운 메뉴에 TestRequestEvent가 선택되어 있어야 합니다.

    3. 페이지 맨 위로 스크롤한 후 Execution result 섹션의 Details 섹션을 확장합니다.

    4. 성공적으로 실행되었는지, 그리고 다음과 같은 함수 결과가 나타나는지를 확인합니다.

    {
        "statusCode": 201,
        "body": "{\"RideId\":\"SvLnijIAtg6inAFUBRT+Fg==\",\"Unicorn\":{\"Name\":\"Rocinante\",\"Color\":\"Yellow\",\"Gender\":\"Female\"},\"Eta\":\"30 seconds\"}",
        "headers": {
            "Access-Control-Allow-Origin": "*"
        }
    }