Google Cloud Workflows Client Library
The `google-cloud-workflows` Python client library, currently at version 1.21.0, allows developers to orchestrate and automate Google Cloud and HTTP-based API services with serverless workflows. It provides a programmatic interface for creating, deploying, and managing workflows. Google Cloud client libraries typically follow a frequent release cadence, with updates addressing new features, bug fixes, and API changes.
Warnings
- breaking Workflows no longer supports HTTP requests to IP-based endpoints of Google Kubernetes Engine (GKE) cluster control planes. You must now use DNS-based endpoints for such communications.
- gotcha Google Cloud Workflows do not natively support user-defined environment variables within the workflow definition itself. This can complicate deploying the same workflow to multiple environments with different configurations.
- gotcha Workflows have strict resource limitations, including a maximum HTTP response size of 2MB (if saved to a variable) and a 512KB memory limit for all variables within a single execution. Events larger than the maximum argument size may fail to trigger executions.
- gotcha When defining workflows in YAML, placing a `for` loop directly after a `try` block will cause a deployment error. This is a syntax parsing issue.
- gotcha Each step in a Google Cloud Workflow incurs a latency overhead of approximately 100-200ms. For workflows with many sequential steps, this can significantly increase overall execution time.
- gotcha Workflows have an execution limit of 10,000 steps per workflow. Long-running or data-intensive workflows that iterate many times may unexpectedly terminate if this limit is reached.
Install
-
pip install google-cloud-workflows
Imports
- WorkflowsClient
from google.cloud.workflows_v1 import WorkflowsClient
- ExecutionsClient
from google.cloud.workflows.executions_v1 import ExecutionsClient
Quickstart
import os
import json
from google.cloud.workflows_v1 import WorkflowsClient
from google.cloud.workflows.executions_v1 import ExecutionsClient
from google.cloud.workflows.executions_v1.types.executions import Execution
# Set your Google Cloud Project ID, region, and existing workflow name
PROJECT_ID = os.environ.get('GOOGLE_CLOUD_PROJECT', 'your-project-id')
LOCATION = os.environ.get('GOOGLE_CLOUD_LOCATION', 'us-central1')
WORKFLOW_NAME = os.environ.get('GOOGLE_CLOUD_WORKFLOW_NAME', 'my-first-workflow')
# Initialize clients
workflows_client = WorkflowsClient()
executions_client = ExecutionsClient()
# Construct the parent path for the workflow
parent_path = workflows_client.workflow_path(PROJECT_ID, LOCATION, WORKFLOW_NAME)
# Define optional runtime arguments for the workflow (as a JSON string)
runtime_arguments = {
"name": "World"
}
# Create an execution instance
execution = Execution(argument=json.dumps(runtime_arguments))
print(f"Creating execution for workflow: {WORKFLOW_NAME} in {LOCATION}...")
# Send the request to create the execution
response = executions_client.create_execution(parent=parent_path, execution=execution)
print(f"Created execution: {response.name} with state: {response.state.name}")
print("To view the execution in the console, visit:")
print(f"https://console.cloud.google.com/workflows/executions/{LOCATION}/{WORKFLOW_NAME}/{response.name.split('/')[-1]}?project={PROJECT_ID}")