 
        こんにちは、香田です。
今回はCloud Workflowsを使用しCloud Runを実行する方法について紹介してきます。
実行するCloud Runについては、認証機能を利用しCloud Workflowsのみ使用できるようにしていきます。
サンプルアプリの作成
はじめにCloud Runへデプロイするサンプルアプリ用のディレクトリを作成します。
mkdir helloworld
cd helloworld下記のコードをコピーし、main.pyという名前でファイルを作成します。
import os
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
    name = os.environ.get("NAME", "World")
    return "Hello {}!".format(name)
if __name__ == "__main__":
    app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))コンテナイメージをビルド
次にアプリをコンテナ化するために下記をコピーし、Dockerfileを作成します。
FROM python:3.9-slim
ENV PYTHONUNBUFFERED True
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . ./
RUN pip install Flask gunicorn
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:appCloud Build を使用してコンテナ イメージをビルドします。ビルドが完了するとContainer Registryへ保存されます。
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/helloworldCloud Runへデプロイする
作成したコンテナイメージをCloud Runへデプロイします。
認証された呼び出しのみ許可させるように、フラグにno-allow-unauthenticatedを使用しています。
gcloud run deploy helloworld \
--image gcr.io/${GOOGLE_CLOUD_PROJECT}/helloworld \
--platform managed \
--no-allow-unauthenticated \
--region asia-northeast1ワークフローの作成
次にワークフローで使用するサービスアカウントを作成します。
gcloud iam service-accounts create workflows-cloud-run \
--display-name=workflows-cloud-runCloud Runを呼び出せるようにrun.invokerロールを付与します。
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member "serviceAccount:workflows-cloud-run@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role "roles/run.invoker"下記の内容を元にworkflow.yamlという名前でファイルを作成します。
urlの箇所はデプロイしたCloud Runのurlを指定してください。
- helloWorldFunction:
    call: http.get
    args:
      url: <Cloud RunのURLを指定する>
      auth:
        type: OIDC
    result: theMessage
- returnValule:
    return: ${theMessage.body}ワークフローをデプロイ
作成したワークフローをデプロイします。
gcloud beta workflows deploy workflows-cloud-run \
--source=workflow.yaml \
--service-account=workflows-cloud-run@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com \
--location=us-central1デプロイしたワークフローを実行します。
gcloud beta workflows execute workflows-cloud-run \
--location=us-central1GCP コンソール画面の[ワークフロー]を選択し、対象ワークフローの[実行の詳細]にて下記の用に表示されていれば成功です。

クリーンアップ
アカウントが課金されないように下記で作成したリソースは削除可能です。
ワークフローの削除
gcloud beta workflows delete workflows-cloud-run \
--location=us-central1サービスアカウントの削除
gcloud iam service-accounts delete workflows-cloud-run@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.comCloud Runの削除
gcloud run services delete helloworld \
--platform managed \
--region asia-northeast1Container Registryのイメージ削除
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/helloworld:latestさいごに
Cloud Workflowsを使用しCloud Runを実行する方法いかがでしたでしょうか。
どちらもサーバーレス製品でインフラの管理が不要な為、組み合わせとしては相性がよいのではないでしょうか。
最後までご覧いただきありがとうございます。