AWS CDKでAPI GatewayにAPI Keyを設定する

Serverless Frameworkだと簡単にできるやつです。

provider:
  name: aws
  runtime: nodejs12.x
  apiKeys:
    - Key
  
functions:
  hello:
    handler: handler.hello
    events:
      - http:
          path: hello
          method: get
          private: true

しかしこれ、結構内部でよしなにされている様子で、AWS CDK(というかCloudFormation)で書こうとすると結構手間です。


import { LambdaRestApi, LambdaIntegration, ApiKeySourceType } from '@aws-cdk/aws-apigateway';

    // API Gatewayの作成
    const api = new LambdaRestApi(this, 'PI', {
      handler: lambdaFunction,
      proxy: false,
      restApiName: 'API',
      apiKeySourceType: ApiKeySourceType.HEADER
    })

    // APIのパス・メソッド定義
    api.addResource('hello').addMethod('GET', new LambdaIntegration(lambdaFunction), {
      apiKeyRequired: true
    })

    // APIキーの作成
    const apiKey =  api.addApiKey('APIKey', {
      apiKeyName: 'BuildAPIKey',
    })

    // 使用量プランを使って関連付け
    api.addUsagePlan('ForAPIKey', {
      apiKey,
    }).addApiStage({
      stage: api.deploymentStage
    })

    // APIキーを出力
    new CfnOutput(this, 'APIKey', {
      value: apiKey.keyId
    })

ドキュメントがなくて半日近くハマったので覚書

Comment