serverless (AWS lambda)

CodeLog·2021년 11월 15일
0

Serverless ?

서버리스(serverless)란 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델입니다.

서버리스 모델에도 서버가 존재하긴 하지만, 애플리케이션 개발에서와 달리 추상화되어 있습니다. 클라우드 제공업체가 서버 인프라에 대한 프로비저닝, 유지 관리, 스케일링 등의 일상적인 작업을 처리하며, 개발자는 배포를 위해 코드를 컨테이너에 패키징하기만 하면 됩니다.

AWS RESTful API Serverless achitectrue(API Gateway + lambda + dynamoDB)

AWS API Gateway란?

Amazon API Gateway는 규모와 관계없이 REST 및 WebSocket API를 생성, 게시, 유지, 모니터링 및 보호하기 위한 AWS 서비스입니다. API 개발자는 AWS 또는 다른 웹 서비스를 비롯해 AWS 클라우드에 저장된 데이터에 액세스하는 API를 생성할 수 있습니다. API Gateway API 개발자는 자체 클라이언트 애플리케이션에서 사용할 API를 생성할 수 있습니다. 또는 타사 앱 개발자가 API를 사용하도록 제공할 수도 있습니다.

AWS lambda 란?

Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. Lambda는 고가용성 컴퓨팅 인프라에서 코드를 실행하고 서버와 운영 체제 유지 관리, 용량 프로비저닝 및 자동 조정, 코드 및 보안 패치 배포, 코드 모니터링 및 로깅 등 모든 컴퓨팅 리소스 관리를 수행합니다. Lambda를 사용하면 거의 모든 유형의 애플리케이션 또는 백엔드 서비스에 대한 코드를 실행할 수 있습니다. Lambda가 지원하는 언어 중 하나로 코드를 공급하기만 하면 됩니다.

AWS DynamoDB 란?

Amazon DynamoDB는 완벽하게 관리되는 NoSQL 데이터베이스 서비스로서 원활한 확장성과 함께 빠르고 예측 가능한 성능을 제공합니다. DynamoDB는 분산 데이터베이스를 운영하고 크기 조정하는 데 따른 관리 부담을 줄여서 하드웨어 프로비저닝, 설정 및 구성, 복제, 소프트웨어 패치 또는 클러스터 크기 조정에 대해 걱정할 필요가 없게 합니다. 또한 DynamoDB는 유휴 시 암호화를 제공하여 중요한 데이터 보호와 관련된 운영 부담 및 복잡성을 제거합니다.

AWS RESTful API 구성 방법

1. lambda 생성

AWS 로그인 후 lambda 서비스 이동

함수생성 클릭

새로작성을 선택하고 함수이름, 런타임을 설정하고 함수 생성.


아래와 같이 함수가 뚝딱 만들어진다.

2. API Gateway 생성

위 화면에서 "트리거 추가" 버튼을 눌러 lambda 함수가 동작해야 할 이벤트를 선택해준다.

RESTful API를 구축해야 하기 때문에 API "Gateway" 선택

API, API 유형, 보안을 설정하고 생성한다.


설정완료 후

트리거 섹션에 API 엔드포인트로 접속 하면 람다 함수가 작동하는것을 확인 하 수 있다.

3. dynamoDB 정책 생성 후 lambda와 연결

생성된 API Gateway 의 "구성에서" 실행 역할 이름 클릭

정책 연결

"정책 생성" 클릭

"서비스 선택" 클릭 하여 "dynamoDB" 선택

모든 DynamoDB 작업 선택

리소스 에서 "모든 리소스" 라디오 버튼 선택


다음 태그 클릭

정책 검토 이름 작성 후 생성

IAM 서비스 "정책" 섹션에서 "AlexaForBusinessFullAccess"로 겁색하여 선택 후 역할 클릭

미리생서 해 둔 lambda 함수 클릭

"정책연결" 클릭

생성해둔 dynamoDB 정책을 검색 후 체크하고 "정책연결"클릭


정책이 연결되면 추가된다

4. dynamoDB 생성

서비스 검색을 통해 "dynamoDB" 페이지 이동하여 "테이블 생성" 클릭

테이블 이름을 작성하고 기본키는 "id"로 입력 후 생성


생성완료

생성된 테이블 클릭 시

lambda 서비스 페이로 넘어와서 테스트 코드를 작성한다.

const AWS = require('aws-sdk')
const dynamodb = new AWS.DynamoDB.DocumentClient()

exports.handler = async (event) => {
    let response
    
    if (!event.queryStringParameters || !event.queryStringParameters.id) {
        response = {
            statusCode: 400,
            body: JSON.stringify("id가 없습니다."),
        }
        return response
    } else {
        let params = {
            Item: {
                id: event.queryStringParameters.id,
                data: event.queryStringParameters
            },
            TableName: "api_table",
        }
        
        await dynamodb.put(params).promise().catch(e => {
            response = {
                statusCode: 500,
                body: JSON.stringify("에러가 발생하였습니다: " + e),
            }
            return response
        })
        
        response = {
            statusCode: 200,
            body: JSON.stringify("데이터가 성공적으로 저장되었습니다.")
        }
        return response
    }
};

API Gateway를 클릭해서 API엔드포인트로 접속한다


파라미터가 적용 되지 않았기 때문에 "id가 없습니다" error가 표시 된다

url끝에 ?id=test 라고 작성 해 보면 데이터가 저장 된다

추가된 DB 테이블 필드 확인

서비스 > dynamoDB > 항목
저장된 데이터 확인

참고 : https://www.redhat.com/ko/topics/cloud-native-apps/what-is-serverless
참고 : https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/welcome.html

profile
개발로그

0개의 댓글