【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の権限)
必要なツール
- Node.js
- バージョン18以上を推奨
- Node.jsの公式サイトからダウンロード
2. AWS CLI
- AWSリソースをコマンドラインで操作するために必要
- 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を使っていたので、比較してみたいですね