AWS Workflow
Uses the Workflow component to create an
AWS Lambda durable workflow.
Hit the Invoker URL to start the workflow. The workflow logs a callback URL
with a token query parameter. Open that URL to resume the waiting step.
const workflow = new sst.aws.Workflow("Workflow", { handler: "src/workflow.handler",});
const resolver = new sst.aws.Function("Resolver", { handler: "src/resolver.handler", url: true, link: [workflow],});
const invoker = new sst.aws.Function("Invoker", { handler: "src/invoker.handler", url: true, link: [workflow, resolver],});import { workflow } from "sst/aws/workflow";
interface Event { resolverUrl: string;}
export const handler = workflow.handler<Event>(async (event, ctx) => { await ctx.step("start", async ({ logger }) => { logger.info("Workflow started."); });
const result = await ctx.waitForCallback( "callback", async (token, { logger }) => { const resolverUrl = new URL(event.resolverUrl); resolverUrl.searchParams.set("token", token);
logger.info(resolverUrl.toString()); }, { timeout: { minutes: 5, }, }, );
await ctx.step("finish", async ({ logger }) => { logger.info(result); });});import { APIGatewayProxyEventV2 } from "aws-lambda";import { workflow } from "sst/aws/workflow";
export const handler = async (event: APIGatewayProxyEventV2) => { const token = event.queryStringParameters?.token;
if (!token) { return "Missing token in query parameters"; }
await workflow.succeed(token, { payload: { message: "Sent from the resolver." }, });
return "Workflow callback sent. Check the logs to see the workflow succeed." ;};import { Resource } from "sst";import { workflow } from "sst/aws/workflow";
export const handler = async () => { await workflow.start(Resource.Workflow, { name: `workflow-example-${Date.now()}`, payload: { resolverUrl: Resource.Resolver.url, }, });
return "Workflow started. Check the logs for the callback URL.";};View the full example.