Skip to Content
platform-guidesLambda Edge

Last Updated: 3/11/2026


Lambda@Edge

Lambda@Edge  is a serverless platform by AWS that runs Lambda functions at CloudFront edge locations, enabling customization of HTTP requests and responses.

Setup

Use AWS CDK  to set up CloudFront, IAM roles, and Lambda functions:

mkdir my-app cd my-app cdk init app -l typescript npm install hono mkdir lambda

Hello World

Edit lambda/index_edge.ts:

import { Hono } from 'hono' import { handle } from 'hono/lambda-edge' const app = new Hono() app.get('/', (c) => c.text('Hello Hono on Lambda@Edge!')) export const handler = handle(app)

Deploy

Edit bin/my-app.ts:

#!/usr/bin/env node import 'source-map-support/register' import * as cdk from 'aws-cdk-lib' import { MyAppStack } from '../lib/my-app-stack' const app = new cdk.App() new MyAppStack(app, 'MyAppStack', { env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: 'us-east-1', }, })

Edit lib/my-app-stack.ts:

import { Construct } from 'constructs' import * as cdk from 'aws-cdk-lib' import * as cloudfront from 'aws-cdk-lib/aws-cloudfront' import * as origins from 'aws-cdk-lib/aws-cloudfront-origins' import * as lambda from 'aws-cdk-lib/aws-lambda' import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs' import * as s3 from 'aws-cdk-lib/aws-s3' export class MyAppStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props) const edgeFn = new NodejsFunction(this, 'edgeViewer', { entry: 'lambda/index_edge.ts', handler: 'handler', runtime: lambda.Runtime.NODEJS_20_X, }) const originBucket = new s3.Bucket(this, 'originBucket') new cloudfront.Distribution(this, 'Cdn', { defaultBehavior: { origin: new origins.S3Origin(originBucket), edgeLambdas: [ { functionVersion: edgeFn.currentVersion, eventType: cloudfront.LambdaEdgeEventType.VIEWER_REQUEST, }, ], }, }) } }

Deploy:

cdk deploy

Callback

Continue request processing after authentication:

import { Hono } from 'hono' import { basicAuth } from 'hono/basic-auth' import type { Callback, CloudFrontRequest } from 'hono/lambda-edge' import { handle } from 'hono/lambda-edge' type Bindings = { callback: Callback request: CloudFrontRequest } const app = new Hono<{ Bindings: Bindings }>() app.get( '*', basicAuth({ username: 'admin', password: 'secret', }) ) app.get('/', async (c, next) => { await next() c.env.callback(null, c.env.request) }) export const handler = handle(app)