AWS CDK 및 AWS Lambda를 사용하여 서버리스 API 배포
12819 단어 serverlessawsawslambdatypescript
소스 코드는 the github repo을 확인하십시오.
AWS CDK란 무엇입니까?
AWS CDK는 코드로 AWS 인프라를 프로비저닝하고 배포할 수 있는 흥미로운 프로젝트입니다. 현재 TypeScript, JavaScript, Python, Java, C#/.Net이 지원됩니다. AWS CDK를 다음 기술과 비교할 수 있습니다.
위의 프로젝트에서는 구성 파일(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/
성공 🎉
Reference
이 문제에 관하여(AWS CDK 및 AWS Lambda를 사용하여 서버리스 API 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/noahfschr/deploy-a-serverless-api-with-aws-cdk-and-aws-lambda-34mp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)