💭
Serverless Next.jsをAWS CDKで立ち上げるサンプル
できれば公式のExampleに持っていきたいので、PRたててリクエスト中。
マージされたらそっちベースにちゃんとした記事書き直す予定。
Serverless Next.jsでAWS CDK
Serverless Next.jsといえば、Serverless Componentを使う印象でした。が、最近CDK版も出たみたいです。
定義イメージ
import * as cdk from '@aws-cdk/core';
import { NextJSLambdaEdge } from "@sls-next/cdk-construct";
export class ServerlessNextjsCdkExampleStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const app = new NextJSLambdaEdge(this, "NextJsApp", {
serverlessBuildOutDir: "./build"
});
new cdk.CfnOutput(this, 'Domain', {
value: app.distribution.domainName,
description: 'CloudFrontDomain'
})
new cdk.CfnOutput(this, 'ID', {
value: app.distribution.distributionId,
description: 'DistributionID',
})
}
}
NextJSLambdaEdge
の戻り値でCloudFrontやLambdaなどのリソースにアクセスできるので、プラスアルファでAWSリソースを立てたい場合はServerless Componentより良さそうです。
作ったテンプレート
create-next-app
をベースに、CDK系のリソースをcdk
にまとめたものです。
monorepoにするほどでもないけど、設定ファイル系を共用するのがなんとなく嫌だったので、そのへんも多少調整しています。
使い方
create-next-app
の--example
でまとめて持っていってください。
$ yarn create next-app --example https://github.com/hideokamoto/serverless-nextjs-cdk-example
Next.js同様yarn dev
でローカルサーバーが立ち上がりますし、AWS CDK同様yarn build && yarn cdk deploy
でAWSにデプロイできます。
Q: AWS Amplify使えば楽じゃね?
CloudFrontに手を入れる気満々なので、AmplifyはNoなのです。
Discussion