---
title: "Cloud Workflowsの膝の上でGoogle APIsを学ぶ | grasys blog"
url: "https://blog.grasys.io/post/tsunoda/learn-googleapis-with-workflows/"
description: "こんにちは、角田です。 Google CloudのWorkflowsを使うと、Google APIsについて学ぶことができます。 学べるし、初心に帰れるし、今よりもうちょっとGoogle Cloudがこっち向いてくれます。 良いっっ この記事は、例えばGCEインスタンスを作成する場合、 と思っている方向けです。 Cl…"
---

# Cloud Workflowsの膝の上でGoogle APIsを学ぶ

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[tsunoda](/authors/tsunoda/)
-   公開日：2025年6月25日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#Google Cloud](/tags/google-cloud/)[#workflows](/tags/workflows/)[#google apis](/tags/google-apis/)[#api](/tags/api/)

![Cloud Workflowsの膝の上でGoogle APIsを学ぶ](/_astro/hero.xfv__CBH_Z1siOmA.webp)

こんにちは、角田です。

Google CloudのWorkflowsを使うと、Google APIsについて学ぶことができます。

学べるし、初心に帰れるし、今よりもうちょっとGoogle Cloudがこっち向いてくれます。

良いっっ

この記事は、例えばGCEインスタンスを作成する場合、

Plain textcontent\_copy

```
gcloud compute instances createコマンドを実行するとGCEインスタンスができる。

terraformファイルを作成してapplyするとGCEインスタンスができる。

Google CloudコンソールでぽちぽちするとGCEインスタンスができる。
```

と思っている方向けです。

![Cloud Workflowsの膝の上でGoogle APIsを学ぶの画面](/_astro/01-11d017c493b78adf05c4bf66cffa358e-1024x679-9b966ad0.BDkVbLVS_ZbArz.webp)

## Cloud Workflowsとは

Google Cloud上で、複数のサービスやAPIを連携・自動化するためのサーバレスのワークフローエンジンです。

プロセスの自動化、データパイプラインの構築などに利用できます。

フルマネージドかつサーバレスなのでインフラの管理は必要ないです。

安いです。

[Cloud Workflows](https://cloud.google.com/workflows?hl=ja)

## Cloud WorkflowsでGCEインスタンスを作ってみる

ワークフローを作成し、GCEインスタンスを作ってみます。

Plain textcontent\_copy

```
hostname：    tsunoda-sample
OS：          Rocky-linux9
zone：        us-central1-c
machine-type: e2-medium
```

ワークフローのソースはこちら↓

Plain textcontent\_copy

```
# create GCE Instance
main:
    params: [input]
    steps:
        - init:
            assign:
                - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - zone: "us-central1-c"
                - machineType: "e2-medium"
                - instance_name: ${"tsunoda-sample"}
        - insert_machine:
            call: googleapis.compute.v1.instances.insert
            args:
                project: ${project}
                zone: ${zone}
                body:
                    name: ${instance_name}
                    machineType: ${"zones/"+ zone + "/machineTypes/"+ machineType}
                    disks:
                        - initializeParams:
                            sourceImage: ${"projects/rocky-linux-cloud/global/images/rocky-linux-9-optimized-gcp-v20250610"}
                          boot: true
                          autoDelete: true
                    scheduling:
                        automaticRestart: false
                        onHostMaintenance: TERMINATE
                        preemptible: true
                    networkInterfaces:
                        - network: "global/networks/default"
                          accessConfigs:
                            - networkTier: PREMIUM
                    tags:
                        items:
                            - tsunoda-sample
```

gcloudコマンドだと、

“gcloud compute instances create ~” で作成しますが、

Cloud WorkflowsではGoogle APIsにしたがって、[Method: instances.insert](https://cloud.google.com/compute/docs/reference/rest/v1/instances/insert) を使用します。

もうの1つポイントは中段ぐらいにある、sourceImage：${“projects/rocky-linux-cloud/global/images/rocky-linux-9-optimized-gcp-v20250610”} です。

どのようにImageのパスを取得してきたかというと、以下のようにコンソールで作成画面を進め、“同等のコード”→“REST”を確認して取得してきています。

![create GCE Instanceの画面（1）](/_astro/02-workflows_restapi_check-1-1024x659-85604705.C70D_uxZ_Z1AF2lX.webp)

コンソールでぽちぽちと作成した内容を、“同等のコード”ボタンでコマンドラインやREST APIに変換してくれます。

REST APIに変換すると、こんな内容になるのです。

ワークフローを実行すると、

Plain textcontent\_copy

```
$ gcloud compute instances list | grep tsunoda-sample
tsunoda-sample         us-central1-c      e2-medium      true         xx.xxx.x.xx   xx.xxx.xx.xxx   RUNNING
```

GCEインスタンスを作成できました。

## 作成したGCEインスタンスを停止して削除する

処理が終わったらインスタンスを停止して削除まで自動で行われることを想定し、そこまでワークフローで自動化してみます。

とりあえずsnapshotを取ってからインスタンスを停止→削除という流れにしてみます。(良さげな処理についてぱっと思いつかずw)

ソースはこちら↓

Plain textcontent\_copy

```
# create GCE Instance
main:
    params: [input]
    steps:
        - init:
            assign:
                - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - zone: "us-central1-c"
                - machineType: "e2-medium"
                - instance_name: ${"tsunoda-sample"}
        - insert_machine:
            call: googleapis.compute.v1.instances.insert
            args:
                project: ${project}
                zone: ${zone}
                body:
                    name: ${instance_name}
                    machineType: ${"zones/"+ zone + "/machineTypes/"+ machineType}
                    disks:
                        - initializeParams:
                            sourceImage: ${"projects/rocky-linux-cloud/global/images/rocky-linux-9-optimized-gcp-v20250610"}
                          boot: true
                          autoDelete: true
                    scheduling:
                        automaticRestart: false
                        onHostMaintenance: TERMINATE
                        preemptible: true
                    networkInterfaces:
                        - network: "global/networks/default"
                          accessConfigs:
                            - networkTier: PREMIUM
                    tags:
                        items:
                            - tsunoda
        - create_snapshot:
            call: googleapis.compute.v1.snapshots.insert
            args:
                project: ${project}
                body:
                    name: ${instance_name+"-"+"testsnap"}
                    sourceDisk: ${"projects/"+project+"/zones/"+zone+"/disks/"+instance_name}
                    storageLocations:
                        - us-central1
        - stop_machine:
            call: googleapis.compute.v1.instances.stop
            args:
                project: ${project}
                zone: ${zone}
                instance: ${instance_name}
        - delete_machine:
            call: googleapis.compute.v1.instances.delete
            args:
                project: ${project}
                zone: ${zone}
                instance: ${instance_name}
```

各stepのargsについては、[GoogleAPIsのinstancesドキュメント](https://cloud.google.com/compute/docs/reference/rest/v1)を見ながら、必要なものを拾ってきています。

[Method: snapshots.incert](https://cloud.google.com/compute/docs/reference/rest/v1/snapshots/insert)

[Method: instances.stop](https://cloud.google.com/compute/docs/reference/rest/v1/instances/stop)

[Method: instances.delete](https://cloud.google.com/compute/docs/reference/rest/v1/instances/delete)

そもそも停止、削除のMethodってどれだっけ？みたいなところからドキュメントを漁っていきます。

snapshotを作成するときに必要な、sourceDisk: ${“projects/”+project+“/zones/”+zone+“/disks/”+instance\_name}については、先ほどと同様コンソールで作成画面を進め、“同等のコード”→“REST”を確認して取得してきています。

![create GCE Instanceの画面（2）](/_astro/03-workflows_restapi_snap-1024x667-fc6d45e5.C1udP-MH_YVi3G.webp)

## Google APIs

そんな感じでCloud Workflowsを使っていくと、Cloud Workflowsを通じてGoogle APIsについて少し慣れてきます。

そうだよね、元を辿ればGoogle APIsだよね、と。

“同等のコード”からも分かるように、コンソールで作成ボタンを押した時に裏側ではGoogle APIsが動いているということを改めて思い出します。

gcloudコマンドも、コンソールでぽちぽちするのも、私たちが普段触っているものってほとんどGoogle APIsに該当しています。

普段意識しないことが多いですが、Cloud Workflowsを触るとイメージが1段階深くなります。

Plain textcontent\_copy

```
gcloud compute instances create → Google APIs → GCEインスタンス完成

terraformファイルを作成してapply → Google APIs → GCEインスタンス完成

Google Cloudコンソールでぽちぽち → Google APIs → GCEインスタンス完成
```

・2002年、Google最古のAPI 「Google Web API」が発表

・2008年、Google Cloud最古のサービスである「App Engine」が開始

・2010年ごろからGoogleのAPIを統一化する流れが加速、ここから今日のGoogle APIsの土台が作られ始める

Google Cloudが開始される前からGoogle APIsはあるんですね。

Google APIsは「シンプルでありながら使いやすい」 という一貫したデザインで続いています。

また、基本的にGoogle APIsはGoogle Cloudコンソール内の 「APIとサービス」で管理ができます。

Google Cloudコンソールの左のメニューから“全てのプロダクトを表示”を押すと1番上に「APIとサービス」が来ます。

おー。根幹を担っている感。

Google Cloud開発者は、その全ての操作をAPI越しに行うことになるので、GoogleのAPIを把握しておくことは非常に重要です。

## Cloud Workflowsを触ってみよう

Cloud Workflowsを触ることで、Google APIsがぐっと身近に！

他のプロダクツでもいけそうですが、色々触ってみた結果、個人の感想としてはCloud Workflowsが1番Google APIsを意識できました。

おすすめです。

コンソールぽちぽちした時は同等のコードも見てみると良いです。

Google APIsに実家のような安心感を感じることができます。ただいま！

皆さん良いWorkflowsライフを。

### 余談

GAEから始まったGoogle Cloudですが、そのGAEはGoogleの「20%ルール」から始まっています。

20%ルールとは、勤務時間の20%は自分の好きなことをするGoogleの社内ルールのことです。

そこからGAEが始まり、今日のGoogle Cloudへ繋がっています。歴史あり。

[Google App Engine 全ては20%プロジェクトからスタートした](https://atmarkit.itmedia.co.jp/fwcr/special/gdd2008/gae01.html)

先日、2歳の息子が汚れた自分の手を見てじっと考え、私の着ていた服で手をゴシゴシ拭きました。

あまりの発想に20%ルールを思い出しました。

## この記事を書いた人

[![](/_astro/tsunoda.CrA_Wh9V_Z1aOeCP.webp)](/authors/tsunoda/)

### [tsunoda](/authors/tsunoda/)

tsunodaのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/tsunoda/)