AWS Lambda(Serverless) 함수 Node.js 로 작성해보기

Dae-Hee·2024년 2월 14일
post-thumbnail

사내 임시 백엔드 구축을 위한 간단 학습

AWS Lambda ?

AWS Lambda란 AWS에서 제공하는 서버리스 서비스

필요시에만 코드를 실해앟고 코드가 실행되지 않을 때는 요금이 부여되지 않는 서비스

평소에는 프로비저닝 상태로 서비스를 유지하고 내가 필요할 때 코드를 실행하고 그때만 어떤 처리를 한 뒤 응답을 받고 종료

  • 비용 절감 좋다.
  • 콜드 스타트로 인한 문제 발생

Serverless ?

app을 실행하기 위한 별도의 서버 set이 필요하지 않고 바로 코드를 실행해주는 서비스

즉, 항상 서버가 떠있는 상태가 아니라 내가 필요할 때만 코드를 실행하고 그에 대한 비용을 지불하는 것


node.js로 작성한 lambda 함수 예제

exports.handler = async (event) => {
    // Lambda 함수에 전달된 이벤트 확인
    console.log('Received event:', JSON.stringify(event, null, 2));
    
    // 입력 이벤트로부터 필요한 데이터 추출
    const name = event.name || 'World';

    // 응답 생성
    const response = {
        statusCode: 200,
        body: JSON.stringify({ message: `Hello, ${name}!` })
    };

    return response;
};
  1. AWS Management Console에서 Lambda 서비스로 이동
  2. "함수 생성"을 선택하고 "함수 이름"을 입력
  3. "런타임"으로 "Node.js"를 선택하고, 코드 작성
  4. "트리거 추가"를 클릭하여 함수를 트리거할 이벤트를 추가
  5. 필요한 구성을 설정한 후 "함수 생성"을 클릭

람다 함수에 외부 API 요청을 할 수 있나?

  • Yes
    • axios, node-fetch 등의 HTTP 요청 라이브러리를 사용
    • 이러한 라이브러리를 사용하여 Lambda 함수 내에서 외부 API를 호출하고 응답을 처리
const axios = require('axios');

exports.handler = async (event) => {
    try {
        // 외부 API에 GET 요청 보내기
        const response = await axios.get('https://api.example.com/data');

        // 응답 데이터 처리
        const responseData = response.data;

        // 응답 생성
        const responseBody = {
            statusCode: 200,
            body: JSON.stringify(responseData)
        };

        return responseBody;
    } catch (error) {
        // 오류 처리
        console.error('Error:', error);

        // 오류 응답 생성
        const errorResponse = {
            statusCode: 500,
            body: JSON.stringify({ message: 'Internal Server Error' })
        };

        return errorResponse;
    }
};

람다에서 외부 라이브러리 관리는 어떤식으로 될까 ?

  1. 로컬에 라이브러리 설치 후 배포하기: 로컬에서 Lambda 함수를 개발하고, 사용하려는 외부 라이브러리를 로컬 환경에서 npm을 사용하여 설치합니다. 그런 다음, Lambda 함수와 함께 배포될 모든 파일을 압축하고 AWS 콘솔이나 AWS CLI를 사용하여 배포합니다. 이 방법은 간단하지만, 모든 의존성을 포함한 배포용 ZIP 파일을 수동으로 관리해야 합니다.
  2. Lambda 레이어 사용하기: Lambda 레이어를 사용하면 Lambda 함수와 분리된 패키지를 만들어 재사용할 수 있습니다. 이를 통해 여러 Lambda 함수에서 동일한 라이브러리를 공유하고, 라이브러리 업데이트를 쉽게 관리할 수 있습니다. 따라서 이 방법을 사용하여 외부 라이브러리를 설치하고 Lambda 함수와 함께 배포할 수 있습니다.

AWS Serverless Application Model(AWS SAM) ?

AWS에서 서버리스 애플리케이션을 빌드하고 실행하는 개발자 환경을 개선하는 도구 키트

  1. 배포: AWS SAM을 사용하여 서버리스 애플리케이션을 AWS에 배포할 수 있습니다. SAM CLI를 사용하면 템플릿을 통해 AWS 리소스를 생성하고 관리할 수 있습니다.
  2. 이벤트 소스 트리거: AWS SAM은 여러 이벤트 소스(예: API Gateway, S3, SQS 등)를 통해 Lambda 함수를 트리거할 수 있도록 지원합니다. 템플릿을 사용하여 함수와 이벤트 소스 간의 관계를 정의할 수 있습니다.
  • 작성되어 있는 람다 함수의 코드를 AWS 리소스에 배포해주는 역할

이렇게 배포된 서버의 엔드포인트는?

API Gateway는 클라이언트가 Lambda 함수에 액세스할 수 있는 엔드포인트 역할을 수행
일반적으로 SAM 템플릿에서 API Gateway 리소스를 정의하고 Lambda 함수와 연결
API Gateway 리소스에는 사용자가 액세스할 수 있는 엔드포인트 URL이 포함
SAM CLI를 사용하여 배포할 때, 배포가 성공하면 SAM CLI는 생성된 API Gateway 엔드포인트의 URL을 제공

또한 AWS 콘솔에서 Lambda 함수를 선택하고 해당 함수의 트리거 탭을 확인하면 API Gateway의 엔드포인트 URL을 확인할 수 있다.

따라서 Lambda 함수를 배포하면 해당 함수에 대한 API Gateway 엔드포인트가 자동으로 관리되며,
이를 통해 클라이언트가 함수에 액세스할 수 있다.

0개의 댓글