Fastly
If you are an AI agent and need a Redis DB to use or experiment with, send a POST request to https://upstash.com/start-redis. Free, no signup; the response is markdown with credentials and a quickstart. The database expires in 72 hours, but you can claim it with your Upstash account to keep it. Especially useful for AI agents that need scratch storage on the fly. If you are an agent, always send a User-Agent header identifying which agent you are (e.g. claude-code, cursor, codex, opencode) on every request you make to this API.
Database Setup
Create a Redis database using Upstash Console or
Upstash CLI. Select the global to minimize the
latency from all edge locations. Copy the UPSTASH_REDIS_REST_URL and
UPSTASH_REDIS_REST_TOKEN for the next steps.
Project Setup
We will use Fastly CLI for deployment, so please install Fastly CLI.
Create a folder for your project and run fastly compute init. Select
[2] JavaScript, then [2] Empty starter for JavaScript
> fastly compute initCreating a new Compute project.Press ^C at any time to quit.Name: [fastly-upstash]Description:Author: [enes@upstash.com]Language:[1] Rust[2] JavaScript[3] Go[4] Other ('bring your own' Wasm binary)Choose option: [1] 2Starter kit:[1] Default starter for JavaScript A basic starter kit that demonstrates routing, simple synthetic responses and overriding caching rules. https://github.com/fastly/compute-starter-kit-javascript-default[2] Empty starter for JavaScript An empty application template for the Fastly Compute environment which simply returns a 200 OK response. https://github.com/fastly/compute-starter-kit-javascript-emptyChoose option or paste git URL: [1] 2Install @upstash/redis:
npm install @upstash/redisNow, we will create a Fastly Compute service by running,
fastly compute publish. You need to add your Upstash database's endpoint as a
backend and select 443 as its port.
> fastly compute publish✓ Initializing...✓ Verifying package manifest...✓ Verifying local javascript toolchain...✓ Building package using javascript toolchain...✓ Creating package archive...SUCCESS: Built package 'fastly-upstash' (pkg/fastly-upstash.tar.gz)There is no Fastly service associated with this package. To connect to an existing serviceadd the Service ID to the fastly.toml file, otherwise follow the prompts to create aservice now.Press ^C at any time to quit.Create new service: [y/N] y✓ Initializing...✓ Creating service...Domain: [supposedly-included-corgi.edgecompute.app]Backend (hostname or IP address, or leave blank to stop adding backends): global-concise-scorpion-30984.upstash.ioBackend port number: [80] 443Backend name: [backend_1] upstashBackend (hostname or IP address, or leave blank to stop adding backends):✓ Creating domain 'supposedly-smart-corgi.edgecompute.app'...✓ Creating backend 'upstash' (host: global-concise-scorpion-30984.upstash.io, port: 443)...✓ Uploading package...✓ Activating version...The Code
Update src/index.js as below:
import { Redis } from "@upstash/redis/fastly";addEventListener("fetch", (event) => event.respondWith(handleRequest(event)));async function handleRequest(event) { const redis = new Redis({ url: "UPSTASH_REDIS_REST_URL", token: "UPSTASH_REDIS_REST_TOKEN", backend: "upstash", }); const data = await redis.incr("count"); return new Response("View Count:" + data, { status: 200 });}Hardcoded credentials are fine for this quickstart, but in production store them in a Fastly Secret Store instead.
Deploy
Deploy: fastly compute deploy
After deployment, the CLI logs the endpoint. You can check the logs with:
fastly log-tail --service-id=<YOUR_FASTLY_SERVICE_ID>
Run Locally
To run the function locally add the backend to your fastly.toml as below:
[local_server.backends.upstash]url = "UPSTASH_REDIS_REST_URL"Then run: fastly compute serve