arazzo: 1.0.1 info: title: AWS API Gateway Build an HTTP API summary: Create an HTTP API, attach a backend integration, wire a route to it, and publish a stage. description: >- The canonical Amazon API Gateway V2 build flow for an HTTP API. The workflow creates an API, creates a backend integration, creates a route whose target references that integration, and finally creates a stage to publish the API. Because createApi, createStage, and related operations collide with the V1 description, they are addressed through the V2 source. Every step spells out its request inline so the flow can be read and executed without opening the underlying OpenAPI description. version: 1.0.0 sourceDescriptions: - name: apiGatewayV2 url: ../openapi/aws-api-gateway-v2-openapi.yml type: openapi workflows: - workflowId: build-http-api summary: Stand up an HTTP API with an integration, a route, and a stage. description: >- Creates an HTTP API, an integration, a route bound to the integration, and a stage to publish it. inputs: type: object required: - name - integrationUri - routeKey - stageName properties: name: type: string description: Name of the HTTP API. description: type: string description: Optional description for the API. integrationType: type: string description: Type of integration (AWS, AWS_PROXY, HTTP, HTTP_PROXY, MOCK). integrationUri: type: string description: Integration target URI (e.g. a Lambda or HTTP backend). payloadFormatVersion: type: string description: Payload format version for the integration. routeKey: type: string description: Route key for the route (e.g. "GET /items"). stageName: type: string description: Name of the stage to publish. steps: - stepId: createApi description: Create the HTTP API container. operationId: $sourceDescriptions.apiGatewayV2.createApi requestBody: contentType: application/json payload: Name: $inputs.name ProtocolType: HTTP Description: $inputs.description successCriteria: - condition: $statusCode == 201 outputs: apiId: $response.body#/ApiId apiEndpoint: $response.body#/ApiEndpoint - stepId: createIntegration description: Create the backend integration the route will forward requests to. operationId: createIntegration parameters: - name: api_id in: path value: $steps.createApi.outputs.apiId requestBody: contentType: application/json payload: IntegrationType: $inputs.integrationType IntegrationUri: $inputs.integrationUri PayloadFormatVersion: $inputs.payloadFormatVersion successCriteria: - condition: $statusCode == 201 outputs: integrationId: $response.body#/IntegrationId - stepId: createRoute description: >- Create the route, targeting the integration via the integrations/ target reference. operationId: createRoute parameters: - name: api_id in: path value: $steps.createApi.outputs.apiId requestBody: contentType: application/json payload: RouteKey: $inputs.routeKey Target: integrations/$steps.createIntegration.outputs.integrationId successCriteria: - condition: $statusCode == 201 outputs: routeId: $response.body#/RouteId - stepId: createStage description: Create a stage to publish the API. operationId: createStage parameters: - name: api_id in: path value: $steps.createApi.outputs.apiId requestBody: contentType: application/json payload: StageName: $inputs.stageName AutoDeploy: true successCriteria: - condition: $statusCode == 201 outputs: stageName: $response.body#/StageName outputs: apiId: $steps.createApi.outputs.apiId apiEndpoint: $steps.createApi.outputs.apiEndpoint integrationId: $steps.createIntegration.outputs.integrationId routeId: $steps.createRoute.outputs.routeId stageName: $steps.createStage.outputs.stageName