0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Codex使用】GCP Cloud RunにPython Flask Hello WorldをGithub Actionsでデプロイするまで - 3

Posted at

前回までの記事
エイヤで作ったCodexのgithub actionsのワークフローは流石に動かなかった。
https://qiita.com/yuichiro-kawabata-fg/items/c8b8374cba2dce6d0313

対応していきます。
まずは足りていなかった権限を追加

github用アカウントに権限追加
gcloud projects add-iam-policy-binding %PROJECT_ID% ^
  --member="serviceAccount:github-actions-deployer@%PROJECT_ID%.iam.gserviceaccount.com" ^
  --role="roles/artifactregistry.writer"

それでもまだ以下のエラーが発生中

denied: Unauthenticated request. Unauthenticated requests do not have permission "artifactregistry.repositories.uploadArtifacts" on resource "projects/***/locations/us/repositories/gcr.io" (or it may not exist)
Error: Process completed with exit code 1.

そもそもCloud run側に最初ソースをデプロイする箱は用意してある必要がありそう。
以下からソースをデプロイ

ソースを一旦デプロイ
gcloud run deploy %PROJECT_SOURCE_NAME% \
  --source . \
  --region=asia-northeast1 \
  --platform=managed \
  --allow-unauthenticated

デプロイは成功。だがテストは失敗する。
(デプロイ後のサービスURLにアクセスできるかをテストしている)

Error: Process completed with exit code 1.

Cloud RunのポータルからサービスURLを確認してアクセスしたところ以下のような画面になる。
image.png

Github Actionsからデプロイしたコンテナの、「未認証呼び出しの許可」がオフ(デフォルト)になっていることで誰もアクセスできない状態になっていた。
まずアクセス確認したいので、未認証でもアクセスできるように変更

ソースを一旦デプロイ
gcloud run services add-iam-policy-binding %PROJECT_NAME% \
--member="allUsers" \
--role="roles/run.invoker" \
--region=asia-northeast1

Codexにてんこ盛りのYamlを要求したせいで、Readmeの更新などにも失敗したが冷静に考えて別に更新しなくてもいのでこの辺りを整形して最終のYamlを作る

Yaml
name: Deploy to Cloud Run

on:
  push:
    branches:
      - main

jobs:
  build-test-deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.x'

      - name: Install dependencies
        run: |
          pip install -r requirements.txt

      - name: Run tests
        run: |
          pytest

      - name: Authenticate to Google Cloud
        uses: google-github-actions/auth@v1
        with:
          credentials_json: ${{ secrets.GCP_SA_KEY }}

      - name: Configure Docker for Artifact Registry
        run: gcloud auth configure-docker asia-northeast1-docker.pkg.dev --quiet

      - name: Build and push container
        run: |
          IMAGE="asia-northeast1-docker.pkg.dev/${{ secrets.GCP_PROJECT }}/cloud-run-source-deploy/${{ secrets.SERVICE_NAME }}:${{ github.sha }}"
          docker build -t "$IMAGE" .
          docker push "$IMAGE"
          echo "image=$IMAGE" >> $GITHUB_OUTPUT
        id: build

      - name: Deploy to Cloud Run
        id: deploy
        uses: google-github-actions/deploy-cloudrun@v2
        with:
          service: ${{ secrets.SERVICE_NAME }}
          image: ${{ steps.build.outputs.image }}
          region: ${{ secrets.GCP_REGION }}
          project_id: ${{ secrets.GCP_PROJECT }}

      - name: Test deployed service
        run: |
          curl -sSL -f ${{ steps.deploy.outputs.url }}

ワークフロー正常終了!:airplane:

image.png

概念しか知らない私が、ささっとサーバレスとCICDの構成を実装できてしまうなんで
なんてすごい時代でしょうか。
参考になれば幸いです。

ここまでにお世話になったmyGPT様

Codex用のプロンプト作成
https://chatgpt.com/g/g-68333a1b75b4819191ca31f50fdd039a-codex-prompt-forge
Google Cloud特化
https://chatgpt.com/g/g-kjqMRhgXP-google-cloud-guide

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?