arazzo: 1.0.1
info:
title: Amazon EC2 Stop and Create Image
summary: Stop an instance, wait until stopped, then create an AMI from it.
description: >-
Captures a clean AMI from a running instance by first stopping it, polling
DescribeInstances until the instance reports the stopped state, and then
creating an image from the now-quiesced instance. The poll step branches on
the instance state name, looping while stopping and proceeding once stopped.
Every step spells out its request inline using the Amazon EC2 query protocol
(Action and Version parameters) so the flow can be read and executed without
opening the underlying OpenAPI description.
version: 1.0.0
sourceDescriptions:
- name: amisApi
url: ../openapi/amazon-ec2-amis-api-openapi.yml
type: openapi
- name: instancesApi
url: ../openapi/amazon-ec2-instances-api-openapi.yml
type: openapi
workflows:
- workflowId: stop-and-create-image
summary: Quiesce an instance and snapshot it into a reusable AMI.
description: >-
Chains StopInstances, a DescribeInstances poll loop branching on the stopped
state, and CreateImage to produce an AMI from a cleanly stopped instance.
inputs:
type: object
required:
- instanceId
- imageName
properties:
instanceId:
type: string
description: The ID of the instance to stop and image.
imageName:
type: string
description: A name for the new AMI.
imageDescription:
type: string
description: An optional description for the new AMI.
steps:
- stepId: stopInstance
description: Stop the target instance ahead of imaging.
operationId: stopInstances
parameters:
- name: Action
in: query
value: StopInstances
- name: Version
in: query
value: '2016-11-15'
- name: InstanceId
in: query
value: $inputs.instanceId
successCriteria:
- condition: $statusCode == 200
outputs:
stopStatus: $statusCode
- stepId: pollStopped
description: >-
Describe the instance and branch on its state, looping while stopping and
proceeding once it reports stopped.
operationId: describeInstances
parameters:
- name: Action
in: query
value: DescribeInstances
- name: Version
in: query
value: '2016-11-15'
- name: InstanceId
in: query
value: $inputs.instanceId
successCriteria:
- condition: $statusCode == 200
outputs:
state: $response.body#/reservationSet/0/instancesSet/0/instanceState/name
onSuccess:
- name: stillStopping
type: goto
stepId: pollStopped
criteria:
- context: $response.body
condition: $.reservationSet[0].instancesSet[0].instanceState.name == 'stopping'
type: jsonpath
- name: nowStopped
type: goto
stepId: createImage
criteria:
- context: $response.body
condition: $.reservationSet[0].instancesSet[0].instanceState.name == 'stopped'
type: jsonpath
- stepId: createImage
description: Create an AMI from the stopped instance.
operationId: createImage
parameters:
- name: Action
in: query
value: CreateImage
- name: Version
in: query
value: '2016-11-15'
- name: InstanceId
in: query
value: $inputs.instanceId
- name: Name
in: query
value: $inputs.imageName
- name: Description
in: query
value: $inputs.imageDescription
- name: NoReboot
in: query
value: true
successCriteria:
- condition: $statusCode == 200
outputs:
imageId: $response.body#/imageId
outputs:
imageId: $steps.createImage.outputs.imageId
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.