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.
Common errors
-
Permission 'iam.serviceaccounts.actAs' denied on service account...
cause The service account attempting to deploy or execute the workflow lacks the necessary IAM permissions to interact with other Google Cloud resources or to act as another service account.fixGrant the appropriate IAM roles to the service account associated with the workflow or the user deploying it. For example, ensure the service account has `Workflows Editor` or specific roles like `Service Account User` (`roles/iam.serviceAccountUser`) to act as another service account, and relevant roles (e.g., `Storage Object Creator` for Cloud Storage) for resources the workflow interacts with. -
ModuleNotFoundError: No module named 'google.cloud.workflows'
cause The `google-cloud-workflows` Python client library is not installed, or it's not accessible in the current Python environment.fixInstall the library using pip: `pip install google-cloud-workflows`. If using a virtual environment, ensure it's activated. If upgrading, use `pip install --upgrade google-cloud-workflows`. -
Could not deploy workflow: failed to build: error in step...
cause The workflow definition (YAML or JSON) contains syntax errors, references an undefined variable or step, or has incorrect indentation.fixReview the workflow's source code for syntax errors, incorrect indentation, misspelled variable names, or references to non-existent steps or subworkflows. The error message usually points to the specific step or line where the error occurred. -
HTTP server responded with error code 404 in step...
cause The workflow is attempting to access a resource or API endpoint that does not exist, is misspelled, or is in an incorrect location (e.g., a Cloud Run service, Cloud Storage object, or a connector method).fixVerify that the resource or API endpoint URL is correct, exists, and is accessible from the workflow. Ensure that any required location arguments (e.g., `us-central1`) are specified for connector methods, and that resource names are correctly URL-encoded if they contain special characters.
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.
- breaking Google Cloud client libraries, including WorkflowsClient, require Application Default Credentials (ADC) to authenticate with Google Cloud APIs. If ADC are not found in the environment, client initialization will fail with a `DefaultCredentialsError`.
- breaking The Google Cloud client libraries require Application Default Credentials (ADC) to authenticate with Google Cloud services. If ADC are not properly configured or available in the execution environment, client initialization will fail with a `DefaultCredentialsError`.
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}")