Connector for Cloud Functions

Workflows connector that defines the built-in function used to access Cloud Functions 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 Cloud Functions connector:
# Create a function using source code stored as a zip archive in a
# Cloud Storage bucket (gs://BUCKET_NAME/cloud-function-source.zip)
# Source code must be a properly structured Cloud Function
# Expected output: "SUCCESS"
main:
  params: []
  steps:
    - init:
        assign:
          - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
          - location: "us-central1"
          - name: "example-function"
          - bucket: "BUCKET_NAME"  # replace BUCKET_NAME placeholder
          - sourceArchiveUrl: ${"gs://" + bucket + "/cloud-function-source.zip"}
          - service_account: ${project + "@appspot.gserviceaccount.com"}  # App Engine default service account
    - create_function:
        call: googleapis.cloudfunctions.v1.projects.locations.functions.create
        args:
          location: ${"projects/" + project + "/locations/" + location}
          body:
            name: ${"projects/" + project + "/locations/" + location + "/functions/" + name}
            description: "Cloud Function for Workflows connector testing"
            entryPoint: "helloWorld"
            runtime: "nodejs10"
            serviceAccountEmail: ${service_account}
            sourceArchiveUrl: ${sourceArchiveUrl}
            httpsTrigger:
              securityLevel: "SECURE_OPTIONAL"
    - get_function:
        call: googleapis.cloudfunctions.v1.projects.locations.functions.get
        args:
          name: ${"projects/" + project + "/locations/" + location + "/functions/" + name}
        result: function
    - grant_permission_to_all:
        call: googleapis.cloudfunctions.v1.projects.locations.functions.setIamPolicy
        args:
          resource: ${"projects/" + project + "/locations/" + location + "/functions/" + name}
          body:
            policy:
              bindings:
                - members: ["allUsers"]
                  role: "roles/cloudfunctions.invoker"
    - call_function:
        call: http.get
        args:
          url: ${function.httpsTrigger.url}
        result: resp
    - verify_response:
        call: assert_response
        args:
          expected_response: "success"  # function must return "success" when triggered
          actual_response: ${resp.body}
    - delete_function:
        call: googleapis.cloudfunctions.v1.projects.locations.functions.delete
        args:
          name: ${"projects/" + project + "/locations/" + location + "/functions/" + name}
    - the_end:
        return: "SUCCESS"

assert_response:
  params: [expected_response, actual_response]
  steps:
    - compare:
        switch:
          - condition: ${expected_response == actual_response}
            next: end
    - fail:
        raise: ${"Expected response is " + expected_response + ". Received " + actual_response + " instead."}

What's next

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