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

Serverless Frameworkだと簡単にできるやつです。 しかしこれ、結構内部でよしなにされている様子で、AWS CDK(というかCloudFormation)で書こうとすると結構手間です。 ドキュメントがなく […]

広告ここから
広告ここまで

目次

    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
        })

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

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark