はじめに
現在運用中の環境をテスト用として複製する際に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の数だけオーソライザー(必要な場合は)は作成する必要があります。
ドキュメント