【Hono】HonoとAWS Lambdaを使った開発の第一歩

【Hono】HonoとAWS Lambdaを使った開発の第一歩
この記事をシェアする

はじめに

はじめまして!
クラウドビルダーズのKawabataと申します

最近Xをさまよっていたら面白い記事を見つけてしまいました

なんだこれ!
Honoってやつがいろんなところにおる!
調べたらLambdaでも使えるじゃん!

ということでやらないわけにはいかないですよね

Honoとは何か

  • 日本発のWeb フレームワーク
  • JavaScriptランタイム上で動作し、軽量で高速
  • 特にCloudflare Workers、Deno、Bun、Node.jsなどの環境で利用されることを目的として設計されている
  • Web標準APIのみを使用し、外部ライブラリに依存しないため、さまざまなプラットフォームで同じコードを実行できる「書いて一度で実行できる」体験を提供

いろんな環境で同じコードで動くのか
神では?

読み方ほのだと思ってたんですけど、ほのおなんですね
日本産でなおかつ名前が炎なんてかっちょいい

Honoの利点

公式が言うには以下の点が魅力らしい:

  • 超高速🚀 – ルーターはRegExpRouter本当に高速です。線形ループを使用していません。高速です。
  • 軽量🪶 – hono/tinyプリセットは 14kB 未満です。Hono には依存関係がなく、Web 標準のみを使用します。
  • マルチランタイム🌍 – Cloudflare Workers、Fastly Compute、Deno、Bun、AWS Lambda、または Node.js で動作します。すべてのプラットフォームで同じコードが実行されます。
  • 電池付属🔋 – Hono には、組み込みミドルウェア、カスタム ミドルウェア、サードパーティ ミドルウェア、ヘルパーがあります。電池付属。
  • 素晴らしい DX 😃 – 非常にクリーンな API。一流の TypeScript サポート。そして、「Types」ができました。

雑にGoogle翻訳かけてみました
電池付属ってなんやねんと思ったらほんとに電池ついてた…

とりあえず全部魅力的なメリット

事前準備

Honoを使ってLambda開発を始める前に、以下のツールやアカウントが必要です:

必要なアカウント

  • AWSアカウント
  • アクセスキーとシークレットキーの取得
  • 適切なIAMポリシーの設定(Lambda、API Gateway、CloudFormationの権限)

必要なツール

  1. Node.js

2. AWS CLI

3. AWS CDK CLI

  • 以下コマンドでインストール
npm install -g aws-cdk

AWS認証情報の設定

AWS CLIの初期設定を行います:

aws configure

以下の情報を入力:

  • AWS Access Key ID
  • AWS Secret Access Key
  • Default region name(例:ap-northeast-1)
  • Default output format(json推奨)

やってみた

それでは実際にHonoを使ってLambda関数を作成してみましょう
AWS CDKを使用して、効率的にデプロイまで行います

公式のチュートリアルを参考にしました

プロジェクトのセットアップ

まずは、新しいプロジェクトを作成します:

mkdir my-hono-app
cd my-hono-app
cdk init app -l typescript  # AWS CDKプロジェクトの初期化

必要なパッケージをインストールします:

npm install hono
mkdir lambda        # Lambda関数用のディレクトリ
touch lambda/index.ts

シンプルなAPIの作成

lambda/index.ts に以下のコードを記述します:

import { Hono } from 'hono'
import { handle } from 'hono/aws-lambda'

const app = new Hono()

// ルートパスへのGETリクエストを処理
app.get('/', (c) => c.json({
  message: 'Hello Hono!',
  timestamp: new Date().toISOString()
}))

// Lambda用のハンドラー関数をエクスポート
export const handler = handle(app)

AWS CDKの設定

lib/cdk-stack.ts を以下のように編集して、Lambda関数とAPI Gatewayを設定します:

import * as cdk from 'aws-cdk-lib'
import { Construct } from 'constructs'
import * as lambda from 'aws-cdk-lib/aws-lambda'
import * as apigw from 'aws-cdk-lib/aws-apigateway'
import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'

export class MyHonoAppStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props)

    // Lambda関数の作成
    const fn = new NodejsFunction(this, 'HonoFunction', {
      entry: 'lambda/index.ts',
      handler: 'handler',
      runtime: lambda.Runtime.NODEJS_20_X,
    })

    // 関数URLの設定
    fn.addFunctionUrl({
      authType: lambda.FunctionUrlAuthType.NONE,
    })

    // API Gatewayの設定
    new apigw.LambdaRestApi(this, 'HonoApi', {
      handler: fn,
    })
  }
}

デプロイ

以下のコマンドでAWSにデプロイします:

cdk deploy

以下のように表示されたら、yを入力してEnterを押します:

Do you wish to deploy these changes (y/n)?

デプロイが完了すると、コンソールにAPI GatewayのURLが表示されます
このURLにアクセスすると、先ほど作成したJSONレスポンスが返ってくるはず

動作確認

curlやブラウザで表示されたURLにアクセスしてみましょう:

curl https://your-api-url.execute-api.region.amazonaws.com/prod/

以下のようなレスポンスが返ってくれば成功です:

{
  "message": "Hello Hono!",
  "timestamp": "2024-03-14T12:34:56.789Z"
}

ブラウザでアクセスすると…

いけとる!!

このように、Honoを使うことで、シンプルかつ型安全なAPIを簡単に作成できます
また、AWS CDKを利用することで、インフラのセットアップも効率的に行えました

さいごに

なんとなんとAPIが簡単に作れてしまいました
これだけだとHonoの速さとか軽量とかのすごさがわからないので、またいろいろ試してみようと思います

今までChaliceを使っていたので、比較してみたいですね

この記事をシェアする
著者:kawabata
2023年 Jr.Champions選出 2023, 2024年 All Certificate選出 最近はもっぱらCDKとAIばかりです