Closed HaruyaFujimoto closed 1 year ago
自分の GPC アカウントにてテストしながら作成中。
コンテナイメージを push するところでけっこう詰まっていたが、そこは今日解決した。(すごく嬉しい)
あとは Cloud Run のデプロイだけうまくいけばできそう。
github actions が難しいというより、GCP の Workload Identity 連携のところでなにかうまく行かない感じ。
Permissin 周りで、サービスアカウントの role の問題なのか Workload Identity の設定の仕方の問題なのか、問題の切り分けが難しい。
プロジェクトを立て直してまた試しながらやってみる。
おつかれさまです! なかなかややこしいところのようですが、しっかり進めていただけているようで助かります! このまま行けちゃいそうな感じですが、どうしても厳しいことがあれば私(はあまり自信ないですが)もほかの方もサポートしていただけると思うので仰ってください。
ちょっとタスクを持ちすぎてしまったのですが、こちらのタスクの状況を共有します。
自分の google アカウントでプロジェクトを新規作成し、以下のレポジトリで自動デプロイのテストをしながら進めていました。
https://github.com/HaruyaFujimoto/github-action-test
現状として、
という状態になっています。
wiki に github actions にて自動デプロイするまでの GCP 上で必要な操作と、
github actions をテストしながら書いていた際の進め方をまとめました。
自分でもまた試してみたいと思いますが、もし余裕があるようでしたらちらっと見てみてもらえると嬉しいです。
github actions で GCP の認証をする際に Workload Identity 連携を使うことにこだわって設定していたのですが、
別の認証でもよいと考えたらすぐに解決しそうだなぁという気もしつつ、
なんとかその方法でできたらいいなぁと思いつつ、
としていたら時間がだいぶ取られてしまいました。
一旦の進捗共有でした。
進捗共有ありがとうございます! ドキュメントも書いていただけて、とても参考になります。 Workload Identity, 割とはまってる人多そうで、ちょっと大変そうですね。 私の方で試す余裕は正直しばらくなさそうなのですが、問題なければエラーメッセージなど共有いただければ、調査くらいはご協力できるかもしれません。 パーミッション回り……ということなので、たとえばこんなメッセージだったりしますかね?
Deployment failed with
ERROR: (gcloud.beta.run.deploy) PERMISSION_DENIED: Permission 'artifactregistry.repositories.get' denied on resource '//artifactregistry.googleapis.com/projects/api-project-222898232626/locations/us-central1/repositories/cloud-run-source-deploy' (or it may not exist).
https://github.com/google-github-actions/deploy-cloudrun/issues/370
調べてみていただきありがとうございます!!! エラーメッセージについて共有させていただきます。
色々試した結果、行き着いたエラーメッセージが以下のものでした。
ERROR: (gcloud.run.deploy) PERMISSION_DENIED: The caller does not have permission
該当の step の全体のログとしてはこんな感じでした。
Run google-github-actions/deploy-cloudrun@v1
with:
service: ***
image: ***:0af653f157308[2](https://github.com/HaruyaFujimoto/github-action-test/actions/runs/4331530436/jobs/7563453745#step:4:2)94b[3](https://github.com/HaruyaFujimoto/github-action-test/actions/runs/4331530436/jobs/7563453745#step:4:3)687c[4](https://github.com/HaruyaFujimoto/github-action-test/actions/runs/4331530436/jobs/7563453745#step:4:4)7b01681a82424972f
region: ***
project_id: ***
no_traffic: false
env:
WORKLOAD_IDENTITY_PROVIDER: ***
SERVICE_ACCOUNT_EMAIL: ***
IMAGE_URL: ***:0af6[5](https://github.com/HaruyaFujimoto/github-action-test/actions/runs/4331530436/jobs/7563453745#step:4:5)3f157308294b3[6](https://github.com/HaruyaFujimoto/github-action-test/actions/runs/4331530436/jobs/7563453745#step:4:6)8[7](https://github.com/HaruyaFujimoto/github-action-test/actions/runs/4331530436/jobs/7563453745#step:4:7)c47b016[8](https://github.com/HaruyaFujimoto/github-action-test/actions/runs/4331530436/jobs/7563453745#step:4:8)1a82424[9](https://github.com/HaruyaFujimoto/github-action-test/actions/runs/4331530436/jobs/7563453745#step:4:9)72f
SERVICE_NAME: ***
REGION: ***
PROJECT_ID: ***
CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE: /home/runner/work/github-action-test/github-action-test/gha-creds-6c938f0bab7ea321.json
GOOGLE_APPLICATION_CREDENTIALS: /home/runner/work/github-action-test/github-action-test/gha-creds-6c938f0bab7ea321.json
GOOGLE_GHA_CREDS_PATH: /home/runner/work/github-action-test/github-action-test/gha-creds-6c938f0bab7ea321.json
CLOUDSDK_CORE_PROJECT: ***
CLOUDSDK_PROJECT: ***
GCLOUD_PROJECT: ***
GCP_PROJECT: ***
GOOGLE_CLOUD_PROJECT: ***
/usr/bin/tar xz --warning=no-unknown-keyword --overwrite -C /home/runner/work/_temp/f028219a-49[10](https://github.com/HaruyaFujimoto/github-action-test/actions/runs/4331530436/jobs/7563453745#step:4:10)-470c-b5a0-2d2e85cfae1f -f /home/runner/work/_temp/aad2e371-84c1-4298-8af2-a80b04e0f658
Successfully authenticated
Running: gcloud run deploy *** --quiet --image ***:0af653f[15](https://github.com/HaruyaFujimoto/github-action-test/actions/runs/4331530436/jobs/7563453745#step:4:15)7308294b3687c47b0[16](https://github.com/HaruyaFujimoto/github-action-test/actions/runs/4331530436/jobs/7563453745#step:4:16)81a82424972f --update-labels managed-by=github-actions,commit-sha=f[23](https://github.com/HaruyaFujimoto/github-action-test/actions/runs/4331530436/jobs/7563453745#step:4:24)3f784edfb3727a053eccf32f99d1031ab26a8 --platform managed --format json --region *** --project ***
Error: google-github-actions/deploy-cloudrun failed with: failed to execute gcloud command `gcloud run deploy *** --quiet --image ***:0af653f157308294b3687c47b01681a8[24](https://github.com/HaruyaFujimoto/github-action-test/actions/runs/4331530436/jobs/7563453745#step:4:25)24972f --update-labels managed-by=github-actions,commit-sha=f233f784edfb3727a053eccf32f99d1031ab[26](https://github.com/HaruyaFujimoto/github-action-test/actions/runs/4331530436/jobs/7563453745#step:4:27)a8 --platform managed --format json --region *** --project ***`: Deploying container to Cloud Run service [***] in project [***] region [***]
Deploying...
failed
Deployment failed
ERROR: (gcloud.run.deploy) PERMISSION_DENIED: The caller does not have permission
この過程では
ERROR: (gcloud.run.deploy) PERMISSION_DENIED: Permission 'iam.serviceaccounts.actAs' denied on service account 713018068059-compute@developer.gserviceaccount.com (or it may not exist).
のようなエラーがあり、その際には Workload Identity によって github actions に割り当てられるサービスアカウントが、
実行を行うアカウントに成りすますことに失敗したのかな?と思って、言われたロールを言われたアカウントに付与する対応をしました。
今困っているのはエラー内容が The caller does not have permission
とあまり具体性がないというところで、
The caller とは何を示しているのか (どの IAM アカウント?他の要因?) はっきりわからないというところです。
全部の設定を見直すのも1度試してみたもののまだうまくいかず、またゼロから再挑戦した方がよさそうかもと思っていたところでした。
アカウント設定周りを再挑戦する際には、プロジェクトを新しく立て直して以下の手順を行っていました。
#setting-up-workload-identity-federation
これがなかなか大変なので、Workload Identity 連携にこだわりすぎない方がいいのかなと思い始めてきたところでした。
手順をトレースするのは時間も労力もなかなかかかってしまうので、軽く調べてみてもらえると嬉しいです。
おつかれさまです。確かにこれだけだと、肝心のところがさっぱりわかりませんね……。
gcloud run deploy ...
に失敗して、そのときのエラーがThe caller does not have permission
だった、以上のことがさっぱりです。ほかの方法で行けそうなら、そうした方がよさそうです。
The caller does not have permission
はGCP関係では割と一般的なエラーのようで、ググると解決策っぽいのもいろいろ出てきますが、どれも別々なので直接今回の件の参考にはならなそう。
https://www.google.com/search?q=%22The%20caller%20does%20not%20have%20permission%22
過程で出たエラーメッセージの方みたいに、具体的にどこにどの権限がない、みたいなことがわかればよかったんですが。
ローカル環境から、サービスアカウントを使用しての gcloud run deploy
を試してみたところ、
同様のエラー The caller does not have permission
で失敗。
なのでデプロイにための使用しているサービスアカウント、Workload Identity 連携でなりすます先のアカウントにて
なにかしらの権限が足りていない様子。
Cloud Run のデプロイに必要な設定についてもう少し調べてみる。
Cloud Run のデプロイに成功。
ローカルでサービスアカウントを試せたので
https://cloud.google.com/run/docs/reference/iam/roles#additional-configuration
ここにある権限について設定を見直したところ、無事にデプロイができた。
Artifact Registry からイメージを削除することも問題なく動作。
少しソースコードを調整したら github actions の設定ファイルは完了しそう。
おつかれさまでした! デプロイに必要な権限が足りていなかったんですね。 引き続き調整の方もよろしくお願いします!
github actions のワークフローを追加したブランチを作成。
残タスクリスト
おつかれさまです! こうしてみると結構やることありますが、ここまで道筋が見えていれば、後一歩ですかね!? "軽量な Dockerfile" は個人的にはそこまでこだわらなくてもいいかな……とも思いますが、いい感じにできたら素敵ですね! 大したサポートはできないと思いますが、もし詰まるようなところあればいつでも相談してください。
ありがとうございます!
コメント頂けるの助かります!
手順あるように見えますが、それぞれコンソールをちょっと触る〜だったり、cli のワンコマンドだったりするので、
そんなに時間かからずにできるかと思います!
https://github.com/commew/timelogger-api/issues/9#issuecomment-1435492778 こちらで色々決まり、その次のアクションとしてのタスク。
このタスクでやること