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件のフィードバック