I’m a giant fan of utilizing Workflows to orchestrate and automate companies operating on Google Cloud and past. In Workflows, you may outline a workflow in a YAML or JSON file and deploy it utilizing gcloud or utilizing Google Cloud Console. These approaches work however a extra declarative and arguably higher strategy is to make use of Terraform.
Let’s see the best way to use Terraform to outline and deploy workflows and discover choices for retaining Terraform configuration recordsdata extra manageable.
Single Terraform file
Terraform has a google_workflows_workflow useful resource to outline and deploy workflows. For step-by-step directions, see our primary Terraform pattern, which reveals the best way to outline a workflow in predominant.tf and the best way to deploy it utilizing Terraform.
Let’s take a more in-depth take a look at how the Workflows useful resource is outlined in Terraform:
You possibly can see that every part concerning the workflow, akin to identify, area, service account, and even the workflow definition itself are outlined on this single file. Whereas that is workable for easy workflow definitions, it’s hardly maintainable for bigger workflows.
Importing a Workflow definition file
A greater strategy is to maintain the workflow definition in a separate YAML file and import that into Terraform. The templatefile operate of Terraform makes this doable — and in reality very straightforward to do.
Within the Terraform with imported YAML pattern, you may see the best way to import an exterior workflows.yaml file into your Terraform definition:
Importing a number of Workflow definition recordsdata
Importing the workflow YAML file is a step in the proper path, however in giant workflow definitions, you usually have a predominant workflow calling a number of subworkflows. Workflows doesn’t at present assist importing or merging workflow and subworkflow definitions. You find yourself with a single workflow definition file for the primary workflow and all of the subworkflows. This isn’t maintainable.
Ideally, you’d have every subworkflow in its personal file and have the primary workflow merely confer with them. Fortunately, that is straightforward to do in Terraform.
Within the Workflows Terraform with a number of exterior YAMLs pattern, you may see the best way to import an exterior workflows.yaml file for the primary workflow and a subworkflow.yaml file for the subworkflow into your Terraform definition:
That is extra maintainable for certain! One minor concern is that each one YAMLs do find yourself getting merged and deployed as a single YAM to Workflows. Once you debug your workflows and subworkflows, you would possibly get confused with line numbers of your subworkflows.
This wraps up our dialogue of Workflows and Terraform. You possibly can take a look at our workflows-demos repo for all of the supply code for Terraform samples and extra. Because of Jamie Thomson for the template file concept on Terraform. Please attain out to me on Twitter @meteatamel for any questions or suggestions.