AWSCDK가 GA로 바뀌었기 때문에 API Gateway+Lambda를 디자인해 봤습니다.
개시하다
예전부터 신경 쓰던 AWS CDK가 드디어 GA가 됐다.
https://aws.amazon.com/jp/blogs/aws/aws-cloud-development-kit-cdk-typescript-and-python-are-now-generally-available/
AWS CDK는 AWS가 공식적으로 유지 관리하는 AWS 패브릭 관리 도구입니다.
가장 큰 특징은 TypeScript와 Python에서 CloudFormation의 템플릿 파일을 생성할 수 있다는 것이다.
아까 울면서 썼던 YAML 파일, 이제 안 써도 돼 w
특히 평소 Type Script를 사용하던 자신에게 정말 좋은 도구...
단지 개발자 미리보기이기 때문에 매번 업데이트할 때마다 파괴적인 변경이 발생할 수 있기 때문에 나는 업데이트를 따라잡기가 매우 어렵다는 것만 기억할 뿐이다.
AWS CDK가 GA가 됐기 때문에 AWS에 RESSTAPI를 구축할 때 철판 구성인'API Gateway+Lambda'를 CDK로 디자인하자!
환경 구조
AWS-CDK 설치
$ npm i -g aws-cdk
프로젝트 작성
$ mkdir cdk-demo
$ cd cdk-demo
$ cdk init app --language=typescript
이렇게 해서 Type Script로 CDK를 쓸 준비가 됐습니다.
쓰세요!!!
그래서 이번에는 Type Script로 쓰도록 하겠습니다.
qiita_api_lambda.tsimport cdk = require("@aws-cdk/core")
import { Function, Runtime, Code } from "@aws-cdk/aws-lambda"
import { RestApi, Integration, LambdaIntegration, Resource,
MockIntegration, PassthroughBehavior, EmptyModel } from "@aws-cdk/aws-apigateway"
export class QiitaAPILambda extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props)
// Lambda Function 作成
const lambdaFunction: Function = new Function(this, "qiita_demo", {
functionName: "qiita_demo", // 関数名
runtime: Runtime.NODEJS_10_X, // ランタイムの指定
code: Code.asset("lambdaSoruces/demo_function"), // ソースコードのディレクトリ
handler: "index.handler", // handler の指定
memorySize: 256, // メモリーの指定
timeout: cdk.Duration.seconds(10), // タイムアウト時間
environment: {} // 環境変数
})
// API Gateway 作成
const restApi: RestApi = new RestApi(this, "QiitaDemoAPI", {
restApiName: "QiitaDemoAPI", // API名
description: "Deployed by CDK" // 説明
})
// Integration 作成
const integration: Integration = new LambdaIntegration(lambdaFunction)
// リソースの作成
const getResouse: Resource = restApi.root.addResource("get")
// メソッドの作成
getResouse.addMethod("GET", integration)
// CORS対策でOPTIONSメソッドを作成
getResouse.addMethod("OPTIONS", new MockIntegration({
integrationResponses: [{
statusCode: "200",
responseParameters: {
"method.response.header.Access-Control-Allow-Headers":
"'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,X-Amz-User-Agent'",
"method.response.header.Access-Control-Allow-Origin": "'*'",
"method.response.header.Access-Control-Allow-Credentials": "'false'",
"method.response.header.Access-Control-Allow-Methods": "'OPTIONS,GET,PUT,POST,DELETE'",
}
}],
passthroughBehavior: PassthroughBehavior.NEVER,
requestTemplates: {
"application/json": "{\"statusCode\": 200}"
}
}), {
methodResponses: [{
statusCode: "200",
responseParameters: {
"method.response.header.Access-Control-Allow-Headers": true,
"method.response.header.Access-Control-Allow-Origin": true,
"method.response.header.Access-Control-Allow-Credentials": true,
"method.response.header.Access-Control-Allow-Methods": true,
},
responseModels: {
"application/json": new EmptyModel()
},
}]
})
}
}
cdk-app.tsimport "source-map-support/register"
import cdk = require("@aws-cdk/core")
import { QiitaAPILambda } from "./qiita_api_lambda"
const app: cdk.App = new cdk.App()
new QiitaAPILambda(app, "QiitaAPILambdaStack")
app.synth()
설계를 진행하다
TS를 tsc로 컴파일하여 디버깅 명령을 실행하기만 하면 됩니다.$ yarn build
$ cdk deploy
최후
어때요?간단하죠?(어휘력 w)
겸사겸사 말씀드리겠습니다.이 명령을 실행하면 로컬에서 json의 CFn 템플릿을 생성합니다
이거 보고 어떻게 바뀐지 확인하는 것도 나쁘지 않을 것 같아요.
그럼 이따 봐요!!!
Reference
이 문제에 관하여(AWSCDK가 GA로 바뀌었기 때문에 API Gateway+Lambda를 디자인해 봤습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/is_ryo/items/da09b438c76d7e6d25f6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ npm i -g aws-cdk
$ mkdir cdk-demo
$ cd cdk-demo
$ cdk init app --language=typescript
import cdk = require("@aws-cdk/core")
import { Function, Runtime, Code } from "@aws-cdk/aws-lambda"
import { RestApi, Integration, LambdaIntegration, Resource,
MockIntegration, PassthroughBehavior, EmptyModel } from "@aws-cdk/aws-apigateway"
export class QiitaAPILambda extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props)
// Lambda Function 作成
const lambdaFunction: Function = new Function(this, "qiita_demo", {
functionName: "qiita_demo", // 関数名
runtime: Runtime.NODEJS_10_X, // ランタイムの指定
code: Code.asset("lambdaSoruces/demo_function"), // ソースコードのディレクトリ
handler: "index.handler", // handler の指定
memorySize: 256, // メモリーの指定
timeout: cdk.Duration.seconds(10), // タイムアウト時間
environment: {} // 環境変数
})
// API Gateway 作成
const restApi: RestApi = new RestApi(this, "QiitaDemoAPI", {
restApiName: "QiitaDemoAPI", // API名
description: "Deployed by CDK" // 説明
})
// Integration 作成
const integration: Integration = new LambdaIntegration(lambdaFunction)
// リソースの作成
const getResouse: Resource = restApi.root.addResource("get")
// メソッドの作成
getResouse.addMethod("GET", integration)
// CORS対策でOPTIONSメソッドを作成
getResouse.addMethod("OPTIONS", new MockIntegration({
integrationResponses: [{
statusCode: "200",
responseParameters: {
"method.response.header.Access-Control-Allow-Headers":
"'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,X-Amz-User-Agent'",
"method.response.header.Access-Control-Allow-Origin": "'*'",
"method.response.header.Access-Control-Allow-Credentials": "'false'",
"method.response.header.Access-Control-Allow-Methods": "'OPTIONS,GET,PUT,POST,DELETE'",
}
}],
passthroughBehavior: PassthroughBehavior.NEVER,
requestTemplates: {
"application/json": "{\"statusCode\": 200}"
}
}), {
methodResponses: [{
statusCode: "200",
responseParameters: {
"method.response.header.Access-Control-Allow-Headers": true,
"method.response.header.Access-Control-Allow-Origin": true,
"method.response.header.Access-Control-Allow-Credentials": true,
"method.response.header.Access-Control-Allow-Methods": true,
},
responseModels: {
"application/json": new EmptyModel()
},
}]
})
}
}
import "source-map-support/register"
import cdk = require("@aws-cdk/core")
import { QiitaAPILambda } from "./qiita_api_lambda"
const app: cdk.App = new cdk.App()
new QiitaAPILambda(app, "QiitaAPILambdaStack")
app.synth()
$ yarn build
$ cdk deploy
Reference
이 문제에 관하여(AWSCDK가 GA로 바뀌었기 때문에 API Gateway+Lambda를 디자인해 봤습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/is_ryo/items/da09b438c76d7e6d25f6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)