Hono + Lambda で cdkd(CDK Direct)を試してみた

cdkd(CDK Direct)をXで見かけて、Hono + Lambdaの最小構成でbootstrapからdestroyまで一通り試した記録。deployが体感で速く、一方でCloudFormationを経由しないぶんadmin-equivalentな権限が要る。本格採用はまだ決めていない。

広告ここから
広告ここまで

目次

    cdkd(CDK Direct)が気になったので触ってみました。Hono の aws-lambda テンプレートの上に CDK スタックを追加し、bootstrap から deployまでを動かしてみました。

    やりたかったこと

    cdkd は CloudFormation を経由せず AWS SDK を直接呼び出すことでデプロイを高速化する CDK 互換の CLI です。既存の CDK アプリコードはそのままに、cdk deploycdkd deploy に置き換えるだけで使える設計になっています。今回は、この一連の流れを Hono + Lambda の最小構成で確かめてみました。

    セットアップなどは、CDKとほぼ同じ

    まず npm create honoaws-lambda テンプレートを選び、プロジェクトの雛形を作りました。

    npm create hono
    ✔ Target directory … demo-hono-cdkd
    ✔ Which template do you want to use? › aws-lambda

    続けて cdkd を devDependencies としてローカルにインストールしています。

    
    npm i -D @go-to-k/cdkd
    npx cdkd --version
    0.283.20

    cdkd bootstrap を初回実行すると、state 用・asset 用の S3 バケットと、コンテナアセット用の ECR リポジトリが自動で作られました。

    Creating S3 bucket: cdkd-state-11111 in region us-west-2
    ✓ Enabled bucket versioning
    ✓ Enabled bucket encryption (AES-256)
    ✓ Set bucket policy (deny external access)
    Creating asset bucket: cdkd-assets-111111-us-west-2 in region us-west-2
    Creating container-asset ECR repository: cdkd-container-assets-11111-us-west-2
    ✓ Bootstrap completed successfully

    CDK 側は npx aws-cdk init app --language=typescript でブランクプロジェクトを作り、Lambda 1つと Function URL だけを持つ HonoStack を定義しました。スタック定義自体は普段の CDK と変わりません。

    export class HonoStack extends Stack {
      constructor(scope: Construct, id: string, props?: StackProps) {
        super(scope, id, props)
        const handler = new NodejsFunction(this, 'HonoFunction', {
          entry: join(__dirname, '../src/index.ts'),
          handler: 'handler',
          runtime: Runtime.NODEJS_24_X,
          architecture: Architecture.ARM_64,
        })
        const functionUrl = handler.addFunctionUrl({
          authType: FunctionUrlAuthType.NONE,
        })
      }
    }

    cdkd synth は 71.3kb の index.js を5msでバンドルしました。cdkd deploy は IAM Role・Lambda Function・Function URL など5リソースを、15.15秒で作成しました。

    [1/5] ✓ HonoFunctionServiceRoleD3F73849 (AWS::IAM::Role) created
    [2/5] ✓ HonoFunctionAFF086E5 (AWS::Lambda::Function) created
    [5/5] ✓ HonoFunctioninvokefunctionurl9B400D83 (AWS::Lambda::Permission) created
    Duration: 15.15s
    Outputs:
      HonoStack.FunctionUrl = https://xidg2lprnon3rllb3a3c76br740wpkqo.lambda-url.us-west-2.on.aws/

    cdk と cdkd を2回ずつ実行して試してみる

    せっかく検証用のスタックを作ったので、CDKとcdkdを比較してみました。とはいえ、npx cdk deploy / npx cdkd deploy / npx cdk destroy / npx cdkd destroy を、それぞれ time を付けて2回ずつ実行するという簡単なものです。

    実行結果はこちらでした。

    コマンド 1回目 2回目
    cdk deploy 65.23s 56.30s
    cdkd deploy 22.36s 24.96s
    cdk destroy 31.49s 31.49s
    cdkd destroy 13.79s 13.61s

    deploy も destroy も、cdkd の方が cdk より速い結果になりました。出力を見ている感じとしては、changesetの作成など、CloudFormationをUpdateする前のステップをCDKが処理している段階でcdkdはデプロイが完了しているように感じました。

    まとめ

    CDKを使ったことがある人なら、本当に手軽に試せそうな感じです。cdkdのBootstrapだけは事前にやっておくほうがいいのかもしれません。あと、CDKのExpress Modeはまだ他mせていないので、その辺の比較も実案件では必要かもしれませんね。

    のちほど既存のCDKプロジェクトの移行も試してみようと思います。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark