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
})
ドキュメントがなくて半日近くハマったので覚書