CDK ソリューションの aws-cloudfront-apigateway-lambda を試してみた
aws-cloudfront-apigateway-lambda - AWS Solutions Constructs
上記ソリューションを CDK Typescript で試してみました。
事前準備
今から始める CDK 入門 #1
CDK プロジェクトの作成は上記ブログの手順で実施しました。
ライブラリのインストール
CDK プロジェクトのルートディレクトリで以下のコマンドを実行してライブラリをインストールしました。
$ npm i @aws-solutions-constructs/aws-cloudfront-apigateway-lambda --force
--force
なしだとエラーになったため --force
を付与しています。
CDK コード
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { CloudFrontToApiGatewayToLambda } from '@aws-solutions-constructs/aws-cloudfront-apigateway-lambda';
import * as lambda from 'aws-cdk-lib/aws-lambda';
export class DevioStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new CloudFrontToApiGatewayToLambda(this, 'test-cloudfront-apigateway-lambda', {
lambdaFunctionProps: {
code: lambda.Code.fromAsset(`lambda`),
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler'
},
apiGatewayProps: {
defaultMethodOptions: {
authorizationType: 'NONE'
}
},
});
}
}
ドキュメントのコードでは authorizationType: api.AuthorizationType.NONE
と定義されていますが、api が定義されていないためエラーになります。
そのため、authorizationType: 'NONE'
の部分は書き換えました。
Lambda コード
code: lambda.Code.fromAsset(`lambda`),
上記コードで読み込むディレクトリとコードを用意します。
まず、ルートディレクトリ直下に lambda というディレクトリを作成します。
次に lambda ディレクトリ内に index.js というファイルを作成します。
index.js ファイルの内容が Lambda で実行されるコードになるので、任意のコードを定義してください。
今回は以下のコードを定義しました。
aws-solutions-constructs/source/patterns/@aws-solutions-constructs/aws-cloudfront-apigateway-lambda/test/lambda/index.js at main · awslabs/aws-solutions-constructs
console.log('Loading function');
exports.handler = async (event, context) => {
console.log('Received event:', JSON.stringify(event, null, 2));
return {
statusCode: 200,
headers: { 'Content-Type': 'text/plain' },
body: `Hello from Project Vesper! You've hit ${event.path}\n`
};
};
デプロイ
CDK コマンドでデプロイします。
$ cdk synth
$ cdk deploy
動作確認
作成されるリソースの詳細については冒頭のドキュメントをご覧ください。
CloudFront ディストリビューションのデフォルトドメインにアクセスします。
Lambda からメッセージが返されることを確認できました。
CloudWatch Logs では API Gateway や Lambda のログも確認できます。
まとめ
今回は CDK ソリューションの aws-cloudfront-apigateway-lambda を試してみました。
どなたかの参考になれば幸いです。
Discussion