arazzo: 1.0.1 info: title: Amazon Elastic Load Balancing Provision a Network Load Balancer summary: Stand up a TCP Network Load Balancer with a target group, listener, and registered targets. description: >- Provisions a Network Load Balancer for raw TCP traffic. It creates an internet-facing network load balancer in the supplied subnet, creates a TCP target group with a TCP health check, attaches a TCP listener that forwards to the target group, and registers the initial IP target. Each step spells out its request inline so the flow can be read and executed without opening the underlying OpenAPI description. The Elastic Load Balancing v2 API uses the AWS query protocol, so every operation is a GET whose inputs are carried as query parameters rather than a request body. version: 1.0.0 sourceDescriptions: - name: elbv2Api url: ../openapi/amazon-elastic-load-balancing-openapi.yml type: openapi workflows: - workflowId: provision-network-load-balancer summary: Create an NLB, a TCP target group, a TCP listener, and register targets. description: >- Chains createLoadBalancer, createTargetGroup, createListener, and registerTargets to produce a traffic-ready TCP Network Load Balancer in a single run. inputs: type: object required: - loadBalancerName - subnetId - targetGroupName - vpcId - targetId properties: loadBalancerName: type: string description: The unique name for the network load balancer (max 32 characters). subnetId: type: string description: The ID of a subnet to place the load balancer in. targetGroupName: type: string description: The unique name for the target group. vpcId: type: string description: The ID of the VPC for the target group and targets. listenerPort: type: integer description: The TCP port the listener accepts connections on. default: 443 targetPort: type: integer description: The TCP port the targets receive traffic on. default: 443 targetId: type: string description: The IP address of the first target to register. steps: - stepId: createLoadBalancer description: Create an internet-facing Network Load Balancer in the supplied subnet. operationId: createLoadBalancer parameters: - name: Name in: query value: $inputs.loadBalancerName - name: Subnets in: query value: $inputs.subnetId - name: Scheme in: query value: internet-facing - name: Type in: query value: network - name: IpAddressType in: query value: ipv4 successCriteria: - condition: $statusCode == 200 outputs: loadBalancerArn: $response.body#/loadBalancers/0/loadBalancerArn dnsName: $response.body#/loadBalancers/0/dnsName - stepId: createTargetGroup description: Create a TCP target group in the same VPC with a TCP health check. operationId: createTargetGroup parameters: - name: Name in: query value: $inputs.targetGroupName - name: Protocol in: query value: TCP - name: Port in: query value: $inputs.targetPort - name: VpcId in: query value: $inputs.vpcId - name: HealthCheckProtocol in: query value: TCP - name: TargetType in: query value: ip successCriteria: - condition: $statusCode == 200 outputs: targetGroupArn: $response.body#/targetGroups/0/targetGroupArn - stepId: createListener description: Attach a TCP listener whose default action forwards to the target group. operationId: createListener parameters: - name: LoadBalancerArn in: query value: $steps.createLoadBalancer.outputs.loadBalancerArn - name: Protocol in: query value: TCP - name: Port in: query value: $inputs.listenerPort - name: DefaultActions.member.1.Type in: query value: forward - name: DefaultActions.member.1.TargetGroupArn in: query value: $steps.createTargetGroup.outputs.targetGroupArn successCriteria: - condition: $statusCode == 200 outputs: listenerArn: $response.body#/listeners/0/listenerArn - stepId: registerTargets description: Register the initial IP target with the TCP target group. operationId: registerTargets parameters: - name: TargetGroupArn in: query value: $steps.createTargetGroup.outputs.targetGroupArn - name: Targets.member.1.Id in: query value: $inputs.targetId - name: Targets.member.1.Port in: query value: $inputs.targetPort successCriteria: - condition: $statusCode == 200 outputs: registered: $statusCode outputs: loadBalancerArn: $steps.createLoadBalancer.outputs.loadBalancerArn dnsName: $steps.createLoadBalancer.outputs.dnsName targetGroupArn: $steps.createTargetGroup.outputs.targetGroupArn listenerArn: $steps.createListener.outputs.listenerArn