📝

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 コード

lib/devio-stack.ts
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 コード

lib/devio-stack.ts
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

index.js
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