Connector for Compute Engine

Workflows connector that defines the built-in function used to access Compute Engine within a workflow.

Explore further

For detailed documentation that includes this code sample, see the following:

Code sample

YAML

# This workflow demonstrates how to use the Compute Engine connector:
# Create and start a Compute Engine VM instance, then stop and delete the VM
# Each step waits until the long-running operation of stopping or starting the VM completes
# After each step, the machine status is verified
# Expected output: "SUCCESS"
main:
  params: []
  steps:
    - init:
        assign:
          - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
          - zone: "us-central1-a"
          - instance: "INSTANCE_NAME"  # replace INSTANCE_NAME placeholder
          - machineType: "e2-micro"
    - insert_machine:
        call: googleapis.compute.v1.instances.insert
        args:
          project: ${project}
          zone: ${zone}
          body:
            name: ${instance}
            machineType: ${"zones/" + zone + "/machineTypes/" + machineType}
            disks:
              - initializeParams:
                  sourceImage: "projects/debian-cloud/global/images/debian-10-buster-v20201112"
                boot: true
                autoDelete: true
            networkInterfaces:
              - network: "global/networks/default"
    - start_machine:
        call: googleapis.compute.v1.instances.start
        args:
          instance: ${instance}
          project: ${project}
          zone: ${zone}
    - assert_running:
        call: assert_machine_status
        args:
          expected_status: "RUNNING"
          project: ${project}
          zone: ${zone}
          instance: ${instance}
    - stop_machine:
        call: googleapis.compute.v1.instances.stop
        args:
          instance: ${instance}
          project: ${project}
          zone: ${zone}
    - assert_terminated:
        call: assert_machine_status
        args:
          expected_status: "TERMINATED"
          project: ${project}
          zone: ${zone}
          instance: ${instance}
    - delete_machine:
        call: googleapis.compute.v1.instances.delete
        args:
          instance: ${instance}
          project: ${project}
          zone: ${zone}
    - the_end:
        return: "SUCCESS"

assert_machine_status:
  params: [expected_status, project, zone, instance]
  steps:
    - get_instance:
        call: googleapis.compute.v1.instances.get
        args:
          instance: ${instance}
          project: ${project}
          zone: ${zone}
        result: instance
    - compare:
        switch:
          - condition: ${instance.status == expected_status}
            next: end
    - fail:
        raise: ${"Expected VM status is " + expected_status + ". Received " + instance.status + " instead."}

What's next

To search and filter code samples for other Google Cloud products, see the Google Cloud sample browser.