Terraform で複数の YAML ワークフロー定義をデプロイする
Google Cloud Japan Team
※この投稿は米国時間 2021 年 5 月 13 日に、Google Cloud blog に投稿されたものの抄訳です。
筆者は、Workflows を使用して、Google Cloud やその他で実行されているサービスの調整と自動化を行うことが大好きです。Workflows では、YAML または JSON ファイルでワークフローを定義し、gcloud または Google Cloud Console を使用してデプロイできます。このアプローチでもうまくいきますが、より宣言的で間違いなく優れているアプローチは、Terraform を使用することです。
Terraform を使用してワークフローを定義してデプロイする方法を確認し、Terraform 構成ファイルをより管理しやすくするためのオプションを見ていきましょう。
単一の Terraform ファイル
Terraform には、ワークフローを定義してデプロイするための google_workflows_workflow リソースがあります。詳細な手順については、基本的な Terraform サンプルを参照してください。main.tf ワークフローを定義する方法と、Terraform を使用してワークフローをデプロイする方法が示されています。
Terraform でワークフロー リソースがどのように定義されているかを以下で詳しく見てみましょう。
名前、リージョン、サービス アカウント、さらにはワークフロー定義自体など、ワークフローに関するあらゆる要素が、このファイル 1 つで定義されていることがわかります。シンプルなワークフロー定義ならこれでもうまくいきますが、大規模なワークフローではメンテナンスが難しくなります。
Workflow 定義ファイルをインポートする
もっと優れたアプローチは、ワークフロー定義を別の YAML ファイルに保持し、Terraform にインポートすることです。これは Terraform の templatefile 機能を使って、非常に簡単に行うことができます。
YAML サンプルがインポートされた Terraform で、外部の workflows.yaml ファイルを Terraform 定義にインポートする方法を以下に示します。
複数の Workflow 定義ファイルをインポートする
ワークフロー YAML ファイルをインポートするのは、方向性としては正しいのですが、大規模なワークフロー定義では、メインのワークフローが 1 つあって、そこから複数のサブワークフローが呼び出されていることが多くあります。Workflows は現在、ワークフローとサブワークフローの定義のインポートまたは結合をサポートしていません。そのため、残された方法は、メインのワークフローとすべてのサブワークフローを単一のワークフロー定義ファイルにすることです。しかし、これはメンテナンスがしにくくなります。
理想的なのは、各サブワークフローを独自のファイルに入れ、メイン ワークフローでそれを参照することです。幸いなことに、これは Terraform で簡単に実行できます。
複数の外部 YAML サンプルがインポートされた Workflows Terraform で、メイン ワークフロー用の外部の workflows.yaml ファイルとサブワークフロー用の subworkflow.yaml ファイルを Terraform 定義にインポートする方法を以下に示します。
これで確実にメンテナンスしやすくなります。小さな問題の 1 つとして、すべての YAML が結合されて単一の YAM としてワークフローにデプロイされることが挙げられます。ワークフローやサブワークフローをデバッグするときに、サブワークフローの行番号で混乱してしまう可能性があります。
ワークフローと Terraform の説明は以上です。Terraform のサンプルをはじめとするすべてのソースコードについては、workflows-demos リポジトリをご確認ください。Terraform のテンプレート ファイルのアイデアについて、Jamie Thomson 氏に感謝します。ご不明な点やフィードバックがございましたら、@meteatamel までご連絡ください。
-デベロッパー アドボケイト Mete Atamel