Deploy to production
Getting an agent into production means choosing where it runs and wrapping it in the entry point that host expects. The agent you built in development is the one you ship: the same loop, tools, and model provider run unchanged behind whatever target you pick here. What changes between targets is the packaging around it, not the agent itself.
Deployment targets
Section titled “Deployment targets”A deploy-ready agent
Section titled “A deploy-ready agent”Most targets call the agent over HTTP: they send a request to an invocation route and check a health route to know the container is live. The agent behind those routes is the same one you build anywhere else.
from fastapi import FastAPIfrom strands import Agent
app = FastAPI()agent = Agent()
@app.post("/invocations")async def invoke(request: dict): result = agent(request["prompt"]) return {"output": result.message}
@app.get("/ping")def ping(): return {"status": "healthy"}import { Agent } from '@strands-agents/sdk'import express, { type Request, type Response } from 'express'
const agent = new Agent()const app = express()app.use(express.json())
app.post('/invocations', async (req: Request, res: Response) => { const result = await agent.invoke(req.body.prompt) res.json({ output: result.lastMessage })})
app.get('/ping', (_: Request, res: Response) => res.json({ status: 'healthy' }))
app.listen(Number(process.env.PORT) || 8080)Each target guide takes this shape and adds the packaging it needs: a container image, a Lambda handler, a Kubernetes manifest, or a Terraform module.
Where to go next
Section titled “Where to go next”New to deployment? Start with Docker to containerize the agent locally, then move the image to a cloud target. Already know where you are shipping? Pick that target from the grid above and follow its guide end to end.
Before you ship, read Operating agents in production for the practices that apply across every target: configuration, secrets, scaling, and observability.