AWS CDK 및 AWS Lambda를 사용하여 서버리스 API 배포

이 자습서에서는 AWS Lambda를 사용하여 Serverless API를 구현하고 AWS CDK를 사용하여 배포합니다. Typescript를 CDK 언어로 사용할 것입니다. Redis에서 상태를 유지하는 페이지 뷰 카운터가 됩니다.

소스 코드는 the github repo을 확인하십시오.

AWS CDK란 무엇입니까?



AWS CDK는 코드로 AWS 인프라를 프로비저닝하고 배포할 수 있는 흥미로운 프로젝트입니다. 현재 TypeScript, JavaScript, Python, Java, C#/.Net이 지원됩니다. AWS CDK를 다음 기술과 비교할 수 있습니다.
  • AWS CloudFormation
  • AWS SAM
  • 서버리스 프레임워크

  • 위의 프로젝트에서는 구성 파일(yaml, json)로 인프라를 설정할 수 있고 AWS CDK에서는 코드로 리소스를 설정할 수 있습니다. CDK에 대한 자세한 내용은 관련 AWS Docs 을 참조하십시오.

    프로젝트 설정



    다음을 사용하여 cdk를 설치하십시오. npm install -g aws-cdk
    프로젝트에 대한 디렉터리를 만듭니다. init cdk 디렉토리 내부:

    mkdir api-with-cdk
    
    cd api-with-cdk
    
    cdk init --language typescript
    


    카운터 기능 코드



    API 함수에 대한 디렉토리 생성
    mkdir api
    API 폴더 안에 init, npm 프로젝트를 진행하고 ioredis를 설치합니다.

    cd api
    npm init
    npm install ioredis
    


    api 폴더에서 counter.js 파일을 만듭니다.

    var Redis = require("ioredis");
        if (typeof client === 'undefined') {
            var client = new Redis(process.env.REDIS_URL);
        }
    
    exports.main = async function (event, context) {
        try {
            const count = await client.incr('counter')
            return {
            statusCode: 200,
            headers: {},
            body: "View count:" + count
            };
        } catch (error) {
            var body = error.stack || JSON.stringify(error, null, 2);
            return {
            statusCode: 400,
            headers: {},
            body: JSON.stringify(body)
        }
      }
    }
    


    카운터 서비스



    최상위 디렉토리로 돌아가서 lambda 및 api-gateway 라이브러리를 설치합니다.

    cd ..
    npm install @aws-cdk/aws-apigateway @aws-cdk/aws-lambda
    


    lib 디렉토리 내에서 counter_service.ts를 생성합니다.

    import * as core from "@aws-cdk/core";
    import * as apigateway from "@aws-cdk/aws-apigateway";
    import * as lambda from "@aws-cdk/aws-lambda";
    
    export class CounterService extends core.Construct {
    constructor(scope: core.Construct, id: string) {
    super(scope, id);
    
           const handler = new lambda.Function(this, "AppHandler", {
               runtime: lambda.Runtime.NODEJS_10_X,
               code: lambda.Code.fromAsset("api"),
               handler: "counter.main",
               environment: {
                   REDIS_URL: "REPLACE_HERE"
               }
           });
    
           const api = new apigateway.RestApi(this, "counter-api", {
               restApiName: "Serverless Counter API",
               description: "This is a basic API."
           });
    
           const apiIntegration = new apigateway.LambdaIntegration(handler, {
               requestTemplates: { "application/json": '{ "statusCode": "200" }' }
           });
    
           api.root.addMethod("GET", apiIntegration);
    }
    }
    


    REPLACE_HERE를 적절한 Redis URL(ioredis 형식)로 바꿔야 합니다. Upstash에서 무료로 Serverless Redis 데이터베이스를 생성할 수 있습니다. Upstash console 에서 ioredis URL을 복사합니다.

    스택 업데이트



    업데이트lib/api-with-cdk-stack.ts:

    import * as cdk from '@aws-cdk/core';
    import * as counter_service from '../lib/counter_service';
    
    export class ApiWithCdkStack extends cdk.Stack {
        constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
            super(scope, id, props);
            new counter_service.CounterService(this, 'CounterApi');
        }
    }
    


    배포



    상단 폴더에서:

    cdk synth
    cdk bootstrap
    cdk deploy
    


    이제 명령이 엔드포인트 URL을 출력하는 것을 볼 수 있습니다. URL을 클릭하면 페이지 카운터가 표시됩니다.

    https://h9zf2bdye0.execute-api.eu-west-1.amazonaws.com/prod/

    성공 🎉

    좋은 웹페이지 즐겨찾기