Cloud Buildを用いてCloud Run関数をデプロイ

Cloud Buildを使用してCloud Run関数をデプロイする方法を記載します。

Cloud Runとは?

Cloud Runの方はこちらをどうぞ!

Cloud Buildとは?

公式ドキュメントはこちら

Cloud Buildとは、Google Cloudでのビルドを実行するサービスです。
実装したプログラムのデプロイ、テスト実行などを組み込むことでCI/CDを実現することができます。

docker、gradle、maven、bazel、gulp などのビルドツールのコマンドをファイルに記載して構築していくイメージです。

独自のカスタム ビルドステップを作成することもできるっぽいです。

前提

  • ユーザ登録や権限設定などは完了している。(まだの方はこちらの前半部分をどうぞ)
  • Cloud Runのデプロイ部分以外のソースコード、設定等は完了している。
  • サンプルコードは、pythonで記載させていただきます。
  • githubアカウント登録済み、新しいレポジトリを作成済みであること。

サンプルプログラム作成

main.pyなどのファイル名で、以下のようなファイルを作成します。

import functions_framework

# HTTPトリガ
@functions_framework.http
def main(request):
        print("Hello World")
        return "TEST HELLO"

importするものを記載するrequirements.txtも以下の内容で作成

functions-framework==3.*

ビルド用の構成ファイルを作成

今回は、yamlファイルで作成します。

steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  args:
  - gcloud
  - functions
  - deploy
  - $_SERVICE_NAME
  - --entry-point=main
  - --region=asia-northeast1
  - --trigger-http
  - --gen2
  - --runtime=python312
  - --source=.
options:
  logging: CLOUD_LOGGING_ONLY

Google Cloudの設定

Cloud Build APIの有効化

Cloud Buildを使用するために以下の設定を有効化する必要があります。
URLはこちら

同じくCloud Run、Cloud Functionsも有効にしておきましょう。

Cloud Buildの設定

Google CloudコンソールのCloud Buildの「トリガー」画面に遷移

画面上部の「トリガーを作成」をクリック

各入力欄に説明

名前任意のCloud Run名
リージョンデプロイしたい環境
説明自身がわかりやすいようにCloud Runの説明を入力
タグ一覧画面で検索可能な文字列等を入力
イベントビルドするタイミングを選択

下にスクロールして、「ソース」の「リポジトリ」と書かれたところをクリック

「新しいリポジトリに接続」をクリック

「GitHub(Cloud Build Github アプリ)」を選択して「続行」をクリック

上記画面が別ウィンドウで開くので「Authorize Google Cloud Build」をクリック
(Google CloudとGitHubアカウントが別々であれば、別の画面が表示される可能性があります)

「追加」をクリックすると再び別ウィンドウが開くので接続したいレポジトリを選択して「Install」ボタンをクリック

選択すると、元の画面に戻り「接続」ボタンをクリック

最後の方の代入変数だけ「変数を追加」ボタンをクリックして上記のようにCloud Run名を入力します。
他は特に変更せずでOKです。

これは、cloudbuild.yamlの$_SERVICE_NAMEに値を代入する設定です。

「作成」ボタンをクリック
(私の場合、サービスアカウントを入力しないとエラーになったので、
 もしエラーになった方がいればお試しください。)

デプロイ実行

「実行」ボタンをクリック

エラーが出た場合

ビルドをトリガーできませんでした: failed precondition: due to quota restrictions, cannot run builds in this region, see https://cloud.google.com/build/docs/locations#restricted_regions_for_some_projects

トリガーを複製してリージョンを「グローバル」に変更したら動くようになりました。
エラーの原因は謎です。。。

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Permission 'run.services.setIamPolicy' denied on resource 'projects/〜/locations/〜/services/〜' (or resource may not exist).]

続いて↑のエラーが出た場合(おそらくcloudbuild.yamlで「allow-unauthenticated」(未認証を許可)などの設定を追加すると出る。

「IAMと管理」のページから「Cloud Run 管理者」の権限を追加

これはおそらくCloud Functions(Cloud Run関数)、もしくはCloud Runをビルド・デプロイ後に未認証許可などの設定をサービスアカウントが実行しているため、その権限が必要なんだと思う。
(エラーになっても「認証が必要」な設定で、Cloud Run、Cloud Functions(Cloud Run関数)自体は作られているため)

「Cloud Buildを用いてCloud Run関数をデプロイ」への4件のフィードバック

コメントする