LoginSignup
1

More than 1 year has passed since last update.

【AWS】CDKv2で環境構築 apigateway編

Last updated at Posted at 2022-06-26

はじめに

現在運用中の環境をテスト用として複製する際にCDKv2を用いて
コード化することになったのでその学びです。

DynamoDB編はこちら
Lambda編はこちら
Cognito編はこちら
StepFunctions編はこちら

準備

このへんの記事でまずは環境設定
https://aws.amazon.com/jp/getting-started/guides/setup-cdk/

今回はTypeScriptを用いて実装しました。

$ cdk init --language typescript

オーソライザーの作成

今回はオーソライザーを使用したAPIGatewayの作成をします。
まず先にオーソライザー作成が必要です。

main-stack.ts
import * as cognito from 'aws-cdk-lib/aws-cognito';

export class MainStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // オーソライザー作成
    const sample_authorizer = new apigw.CognitoUserPoolsAuthorizer(this, 'Sample_authorizer',{
        authorizerName: 'sample-authorizer',
        cognitoUserPools: [UserPool], // Cognito編で定義したUserPoolを指定しています
    });
  }
}

api作成

main-stack.ts
import * as cognito from 'aws-cdk-lib/aws-cognito';

export class MainStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // オーソライザー作成
    const sample_authorizer = new apigw.CognitoUserPoolsAuthorizer(this, 'Sample_authorizer',{
        authorizerName: 'sample-authorizer',
        cognitoUserPools: [UserPool], // Cognito編で定義したUserPoolを指定しています
    });

    const sample_api = new apigw.RestApi(this, 'Sample-api', {
      restApiName: 'sample-api',
      endpointTypes: [apigw.EndpointType.REGIONAL],
      deployOptions: {
        stageName: "v1", // デフォルトでprod
      },
    });
    sample_api.root
    .addResource('{proxy+}', {
      defaultCorsPreflightOptions: { // リソースに対してCORS設定 optionメソッドが追加される
        allowOrigins: apigw.Cors.ALL_ORIGINS,
        allowMethods: apigw.Cors.ALL_METHODS,
        allowHeaders: apigw.Cors.DEFAULT_HEADERS,
        statusCode: 200,
      },
    })
    .addMethod('ANY', new apigw.LambdaIntegration(sample_fn, { // Lambda編で作成したsample_fnを指定
      proxy: true, // Lambdaプロキシ設定
    }), {
      authorizer: sample_authorizer, // オーソライザー指定
      methodResponses: [ // メソッドレスポンス設定(必要な場合は)
        {
          statusCode: "200",
          responseModels: {
            'application/json': apigw.Model.EMPTY_MODEL
          },
        },
      ]
    });

  }
}

root.addResource()でルートにリソース設定。
addMethod()でメソッド設定し、apigw.LambdaIntegration()でLambdaを指定する。

オーソライザーでの注意点

apiを複数作成するが、同じユーザープールのオーソライザーを使用することはあると思います。
しかし、オーソライザーとAPIは1対1である必要があるため、apiの数だけオーソライザー(必要な場合は)は作成する必要があります。

ドキュメント

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1