AWSCDK가 GA로 바뀌었기 때문에 API Gateway+Lambda를 디자인해 봤습니다.

14033 단어 aws-cdkAWS

개시하다


예전부터 신경 쓰던 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.ts
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()
        },
      }]
    })
  }
}
cdk-app.ts
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()

설계를 진행하다


TS를 tsc로 컴파일하여 디버깅 명령을 실행하기만 하면 됩니다.
$ yarn build
$ cdk deploy

최후


어때요?간단하죠?(어휘력 w)
겸사겸사 말씀드리겠습니다.이 명령을 실행하면 로컬에서 json의 CFn 템플릿을 생성합니다
이거 보고 어떻게 바뀐지 확인하는 것도 나쁘지 않을 것 같아요.
그럼 이따 봐요!!!

좋은 웹페이지 즐겨찾기