모듈 3: 서버리스 서비스 백엔드
AWS Lambda와 Amazon DynamoDB를 사용하여 웹 애플리케이션에 대한 요청을 처리하기 위한 백엔드 프로세스를 만듭니다.
개요
이 모듈에서는 AWS Lambda와 Amazon DynamoDB를 사용하여 웹 애플리케이션에 대한 요청을 처리하기 위한 백엔드 프로세스를 만듭니다. 첫 번째 모듈에서 배포한 브라우저 애플리케이션을 사용하여 사용자는 선택한 위치로 unicorn을 전송하도록 요청할 수 있습니다. 이러한 요청을 이행하려면 브라우저에서 실행 중인 JavaScript가 클라우드에서 실행하는 서비스를 호출해야 합니다.
아키텍처 개요

사용자가 unicorn을 요청할 때마다 호출될 Lambda 함수를 구현하겠습니다. 이 함수는 플릿에서 unicorn을 선택하고, DynamoDB 테이블에 요청을 기록한 후 디스패치된 unicorn에 대한 세부 정보를 프런트 엔드 애플리케이션에 반환합니다.
이 함수는 Amazon API Gateway를 사용하여 브라우저에서 호출됩니다. 다음 모듈에서는 이 연결을 설정합니다. 이 모듈에서는 함수를 따로 테스트만 합니다.
소요 시간
30분
사용 서비스
구현
-
Amazon DynamoDB 테이블 만들기
Amazon DynamoDB 콘솔을 사용하여 새로운 DynamoDB 테이블을 생성합니다. 테이블에 Rides라는 이름을 지정하고, 형식이 문자열(String)인 RideId라는 파티션 키를 부여합니다. 테이블 이름과 파티션 키는 대/소문자를 구분합니다. 제공된 ID를 정확하게 사용해야 합니다. 다른 모든 설정에는 기본값을 사용합니다.
테이블을 작성했으면 다음 단계에서 사용하기 위해 ARN을 메모합니다.
a. AWS 관리 콘솔에서 서비스를 선택한 후 데이터베이스에서 DynamoDB를 선택합니다.
b. 테이블 생성(Create table)을 선택합니다.
c. 테이블 이름(Table name)에 Rides를 입력합니다. 이 필드는 대/소문자를 구분합니다.
d. 파티션 키에 RideId를 입력하고 키 형식으로 문자열을 선택합니다. 이 필드는 대/소문자를 구분합니다.
e. 기본 설정 사용 확인란을 선택하고 생성을 선택합니다.
f. 새 테이블의 개요 섹션 하단으로 스크롤하여 ARN을 메모합니다. 이 이름은 다음 섹션에서 사용할 것입니다.
-
Lambda 함수를 위한 IAM 역할 만들기
각 Lambda 함수에는 IAM 역할이 연결되어 있습니다. 이 역할은 기능이 상호 작용하도록 허용된 다른 AWS 서비스를 정의합니다. 이 연습의 목적상 Amazon CloudWatch Logs에 로그를 쓸 수 있는 권한과 DynamoDB 테이블에 항목을 쓸 수 있는 액세스 권한을 Lambda 함수에 부여하는 IAM 역할을 만들어야 합니다.
IAM 콘솔을 사용하여 새로운 역할을 생성합니다. 이름을 WildRydesLambda로 지정하고 역할 유형으로 AWS Lambda를 선택합니다. Amazon CloudWatch Logs에 데이터를 쓰고 DynamoDB 테이블에 항목을 추가할 수 있는 권한을 함수에 부여하는 정책을 연결해야 합니다.
AWSLambdaBasicExecutionRole이라는 관리형 정책을 이 역할에 연결하여 필요한 CloudWatch Logs 권한을 부여합니다. 또한, 이전 섹션에서 생성한 테이블에 대해 ddb:PutItem 작업을 허용하도록 역할에 사용자 지정 인라인 정책을 생성합니다.
a. AWS 관리 콘솔에서 서비스를 클릭한 후 보안, 자격 증명 및 규정 준수 섹션에서 IAM을 선택합니다.
b. 왼쪽 탐색 모음에서 역할을 선택한 후 Create New Role(새 역할 생성)을 선택합니다.
c. AWS 서비스 그룹에서 역할 유형으로 Lambda를 선택한 후 다음: 권한을 클릭합니다.
참고: 역할 유형을 선택하면 역할에 대해 신뢰할 수 있는 정책이 자동으로 생성됩니다. 이 정책은 AWS 서비스가 이 역할을 대리할 수 있도록 허용합니다. CLI, AWS CloudFormation 또는 다른 방법을 사용하여 역할을 생성한 경우 신뢰할 수 있는 정책을 직접 지정해야 합니다.
d. 필터 텍스트 상자에 AWSLambdaBasicExecutionRole을 입력하고 해당 역할 옆에 있는 확인란을 선택합니다.
e. 다음 단계를 선택합니다.
f. 역할 이름에 WildRydesLambda를 입력합니다.
g. 역할 생성을 선택합니다.
h. 역할 페이지의 필터 상자에 WildRydesLambda를 입력하고 방금 생성한 역할을 선택합니다.
i. 권한 탭에서 오른쪽 아래 모서리에 있는 인라인 정책 추가를 선택하여 새로운 인라인 정책을 생성합니다.
j. 서비스 선택을 선택합니다.
k. 서비스 찾기라는 검색 상자에 DynamoDB라고 입력하기 시작하면 DynamoDB가 표시되며 표시되는 DynamoDB를 선택합니다.
l. 작업 선택을 선택합니다.
m. 작업 필터링이라는 검색 상자에 PutItem을 입력하기 시작하여 PutItem이 표시되면 PutItem 옆에 있는 확인란을 선택합니다.
n. 리소스 섹션을 선택합니다.
o. 특정(Specific) 옵션이 선택된 상태에서 테이블 섹션에있는 ARN 추가 링크를 선택합니다.
이전 섹션에서 생성한 테이블의 ARN을 테이블에 대한 ARN 지정(Specify ARN for table) 필드에 붙여 넣은 후 추가를 선택합니다.
q. 정책 검토(Review policy)를 선택합니다.
r. 정책 이름에 DynamoDBWriteAccess를 입력하고 정책 생성을 선택합니다.
-
요청을 처리하기 위한 Lambda 함수 만들기
AWS Lambda는 HTTP 요청 등과 같은 이벤트에 대응하여 코드를 실행합니다. 이 단계에서는 웹 애플리케이션에서 unicorn을 디스패치하는 API 요청을 처리할 코어 함수를 만듭니다. 다음 모듈에서는 Amazon API Gateway를 사용하여 사용자의 브라우저에서 호출할 수 있는 HTTP 엔드포인트를 표시할 RESTful API를 만들겠습니다. 그런 다음 이 단계에서 만든 Lambda 함수를 해당 API에 연결하여 웹 애플리케이션에 대해 제대로 기능하는 백엔드를 생성하겠습니다.
AWS Lambda 콘솔을 사용하여 RequestUnicorn이라는 새로운 Lambda 함수를 생성합니다. 이 함수는 API 요청을 처리하게 됩니다. 함수 코드에 대해 제공된 requestUnicorn.js 구현 예제를 사용하세요. 파일에서 복사하여 AWS Lambda 콘솔의 편집기에 붙여 넣습니다.
함수가 이전 섹션에서 생성한 WildRydesLambda IAM 역할을 사용하도록 해야 합니다.
a. 서비스를 선택한 후 컴퓨팅 섹션에서 Lambda를 선택합니다.
b. 함수 생성(Create function)을 클릭합니다.
c. 기본 새로 작성 카드가 선택된 채로 둡니다.
d. 이름 필드에 RequestUnicorn을 입력합니다.
e. 런타임에서 Node.js 6.10을 선택합니다.
f. 역할 드롭다운 메뉴에서 기존 역할을 선택합니다가 선택되어 있는지 확인합니다.
g. 기존 역할 드롭다운 메뉴에서 WildRydesLambda를 선택합니다.
h. 함수 생성을 클릭합니다.
i. 함수 코드 섹션으로 스크롤을 내려서 index.js 코드 편집기의 기존 코드를 requestUnicorn.js의 내용으로 바꿉니다.
j. 해당 페이지의 오른쪽 위 모서리에 있는 “저장”을 클릭합니다.
-
구현 검증
이 모듈에서는 AWS Lambda 콘솔을 사용하여 만든 함수를 테스트하겠습니다. 다음 모듈에서는 첫 번째 모듈에서 배포한 브라우저 기반 애플리케이션으로부터 함수를 호출할 수 있도록 하기 위해 API Gateway를 사용하여 REST API를 추가하겠습니다.
a. 함수의 기본 편집 화면에 있는 테스트 이벤트 선택... 드롭다운에서 테스트 이벤트 구성을 선택합니다.
b. 새로운 테스트 이벤트 생성이 선택된 대로 둡니다.
c. 이벤트 이름 필드에 TestRequestEvent를 입력합니다.
d. 다음 테스트 이벤트를 복사해 편집기에 붙여넣습니다.
{ "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}}" }
e. 생성(Create)을 클릭합니다.
f. 기본 함수 편집 화면에서 테스트를 클릭합니다. 이때 드롭다운 메뉴에 TestRequestEvent가 선택되어 있어야 합니다.
g. 페이지 맨 위로 스크롤한 후 실행 결과 섹션의 세부 정보 섹션을 확장합니다.
h. 실행이 성공했는지 그리고 함수 결과가 다음과 같은지 확인합니다.
{ "statusCode": 201, "body": "{\"RideId\":\"SvLnijIAtg6inAFUBRT+Fg==\",\"Unicorn\":{\"Name\":\"Rocinante\",\"Color\":\"Yellow\",\"Gender\":\"Female\"},\"Eta\":\"30 seconds\"}", "headers": { "Access-Control-Allow-Origin": "*" } }