【AWS-CDK】인증 첨부 WebAPI를 Solutions Constructs를 사용해 간편하게 구축
14412 단어 TypeScriptaws-cdk람다APIGatewayAWS
Solutions Constructs로 AWS 인프라 구축
요 전날 AWS Solutions Constructs이 발표되었습니다. 이것은 AWS-CDK에서 추상화된 리소스를 나타내는
Constructs
의 자주(잘) 사용하는 조합을 Well-Architected 준거의 설정 포함으로 한발로 구축할 수 있는 라이브러리입니다. 예를 들면 Lambda + DynamoDB
이나 CloudFront + S3
와 같은 조합의 패턴이 25개(2020/7월 현재) 제공되고 있습니다.이것을 사용하여 아빠와 AWS에 WebAPI를 구축하고 싶습니다.
주의
2020 년 7 월 6 일 현재 Solutions Constructs의 모든 안정성은 Experimental입니다.
프로덕션 환경 등에서의 사용은 잘 검토한 후 실시해 주십시오.
환경
사용할 Constructs
이번에는 다음 Solutions Constructs를 사용합니다.
구성도는 다음과 같습니다.
CDK는 API Gateway, Lambda, Cognito, DynamoDB 테이블을 만듭니다.
또한 각 리소스의 옵션은 기본적으로 아래의 Well-Architected 준수 설정이되어 있습니다.
작성 절차
AWS-CDK CLI를 전역 설치합니다.
npm install -g aws-cdk
설치 후 프로젝트를 만듭니다.
cdk init app --language=typescript
이번에 사용할 라이브러리를 설치합니다. (SolutionsConstructs의 최신 ver가 1.47.0이므로 통일)
npm install -s @aws-cdk/[email protected] @aws-cdk/[email protected] @aws-cdk/[email protected] @aws-cdk/[email protected] @aws-solutions-constructs/[email protected] @aws-solutions-constructs/[email protected]
Constructs를 사용하여 CDK를 작성합니다.
import * as cdk from "@aws-cdk/core";
import * as lambda from "@aws-cdk/aws-lambda";
import { CognitoToApiGatewayToLambda } from "@aws-solutions-constructs/aws-cognito-apigateway-lambda";
import { LambdaToDynamoDB } from "@aws-solutions-constructs/aws-lambda-dynamodb";
import {
AttributeType,
BillingMode,
TableEncryption,
} from "@aws-cdk/aws-dynamodb";
export class CdkWebappStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// The code that defines your stack goes here
const apigwToLambda = new CognitoToApiGatewayToLambda(
this,
"CognitoToApiGatewayToLambdaPattern",
{
deployLambda: true,
lambdaFunctionProps: {
runtime: lambda.Runtime.NODEJS_12_X,
handler: "index.handler",
code: lambda.Code.asset(`${__dirname}/lambda`),
},
}
);
new LambdaToDynamoDB(this, "LambdaToDynamoPattern", {
deployLambda: false,
existingLambdaObj: apigwToLambda.lambdaFunction, // 生成済みのLambdaを使用
dynamoTableProps: {
partitionKey: { name: "id", type: AttributeType.STRING },
// デフォルトの設定は以下の通り
// キャパシティーモード: オンデマンド
// 暗号化タイプ: KMS - AWSマネージドCMK
// 無料枠で使用するために設定を変更している。
billingMode: BillingMode.PROVISIONED,
readCapacity: 5,
writeCapacity: 5,
encryption: TableEncryption.DEFAULT,
},
});
}
}
lib/lambda 디렉토리에는 lambda의 소스를 배치합니다.
index.js
const { DynamoDB } = require("aws-sdk");
exports.handler = async function (event) {
console.log("request:", JSON.stringify(event, undefined, 2));
// create AWS SDK clients
const dynamo = new DynamoDB();
// APIのパスをパーティションキーとして、アクセス回数を記録する
await dynamo
.updateItem({
TableName: process.env.DDB_TABLE_NAME,
Key: { id: { S: event.path } },
UpdateExpression: "ADD hits :incr",
ExpressionAttributeValues: { ":incr": { N: "1" } },
})
.promise();
return {
statusCode: 200,
headers: { "Content-Type": "text/plain" },
body: `Hello, AWS Solutions Constructs! You've hit ${event.path}\n`,
};
};
다음 명령으로 인프라를 배포할 수 있습니다.
npm run build && cdk deploy
cdk deploy
런타임에 리소스 배포 확인이 있으므로 y를 입력하여 배포를 시작합니다.API Gateway 콘솔에서
/foo
메서드를 테스트하면 성공적으로 응답이 반환되는지 확인할 수 있습니다.또한 DynamoDB에 액세스한 경로의 문자열과 액세스 횟수가 기록되어 있는지 확인할 수 있습니다.
요약
이와 같이 Solution Constructs에서는 AWS에서 자주 사용되는 리소스 조합을 Constructs를 통해 제공해 줍니다. 이를 이용하면 폭속으로 지금까지보다 빠르고 Well-Architected에 준거한 인프라를 구축할 수 있게 되었습니다.
참고
Reference
이 문제에 관하여(【AWS-CDK】인증 첨부 WebAPI를 Solutions Constructs를 사용해 간편하게 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Appseed246/items/cd98c5a476502fc7b2fc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)