【GCP】Cloud FunctionsをGithub ActionsからDeployする
id=“はじめに”>はじめに
Cloud FunctionsをGithub Actionsからデプロイする方法のメモ。
基本的には自分用の備忘録。
というより大体ここに載ってます。。。
Google Cloud側の準備
まずService AcountのJSONファイルの取得が必要である。
上のGithubからも辿れるが、GCPの公式ドキュメントにその辺の手順が書いてある。
このService AcountはGithub Actionsが実際にデプロイを行う際に使用されるものになる。
このため、Cloud Functionsを変更できる権限の付与が必要である。
具体的にどれかは実のところよくわかってないが、ここを見る限りでは「編集者」あるいは「所有者」が付いてれば問題なさそうである。
JSONファイルを取得したら中身を開いて全部コピーし、GithubのSecret(リポジトリのSettings>Secret)でシークレットを新規作成した後、Value欄にそのままペタッと貼りつける。
鍵の内容だけを律儀に取り出して張り付けたりとか、そういうのは必要ない。
JSONファイルの中身をそっくりそのまま貼りつければ良い。
ちなみに上の例だとPROJECT IDもシークレットにしていたので、同様の方法でPROJECT IDもシークレットといて用意する。
ワークフローのYAML
下記はNode.jsランタイムのCloud Functionsにデプロイする場合のYAMLの例。
name: Deploy to GCP Cloud Functions on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: # 1.ソースのチェックアウト - uses: actions/checkout@v2 # 2.Node.jsのセットアップ - uses: actions/setup-node@v1 with: node-version: 14.x # 3.npm install(yarn使う場合はyarnに要変更) - name: npm install run: npm install # 4.GCP SDK setup - uses: google-github-actions/setup-gcloud@master name: Set up Cloud SDK with: project_id: ${{ secrets.GCP_PROJECT_ID }} service_account_key: ${{ secrets.GCP_SA_KEY }} export_default_credentials: true # 5.GcloudのFunctionsのRegion設定(東京=asia-northeast-1を指定) - name: gcloud config set functions/region run: gcloud config set functions/region asia-northeast1 # 6.deploy - name: gcloud functions deploy run: sh ./deploy2gcp.sh
- おきまり文句。
- Node.jsのバージョンを指定する。この例だと14系。
npm install
する。yarnの場合はyarn install
になると思う。環境に合わせて適宜変更。- GCPのSDKのセットアップ。
project_id
にシークレットとして用意したGoogle CloudのPROJECT IDを、service_account_key
に同じくシークレットとして用意したService AcountのJSONファイル内容を、それぞれセットする指示。なお、export_default_credentials
は、なんだかよくわからんが必須らしいので付けておく。 - これは自分の時には指定しないと駄目だったので(ワークフローが落ちた)指定している。上の例には書いてないのでもしかしたらSDKのセットアップ(4.の項)を工夫したらなんとかなるのかもしれない。この例では東京=asia-northeast-1を指定している。面倒くさかったのでリージョン名をYAMLファイル内にべた書きしているが、シークレット等で外だしするのも検討するべきである。(って自分で言うなって感じだが)
- コマンドが長くなったので、デプロイの内容を個別のshellに切り出した。平たく言えば
gcloud functions deploy
に過ぎない。今回の場合のshellの中身は以下のようになる
#!/bin/sh gcloud functions deploy [Cloud Function名]\ --allow-unauthenticated \ --trigger-http \ --entry-point [Cloud Functionのエントリーポイント名]\ --runtime nodejs14 exit $?
HTTPトリガーではないとか、runtimeがNode.jsではないとか、諸々のFunctionの実装や設定で変わる部分だと思われる。この辺は適宜要変更。