いつもはcliでcloud functionsをデプロイしていた。
特に問題もなくデプロイできていたのだけども、今回初めてコンソールからデプロイしようとして詰まった。
何がしたかったのか
GCPの費用の管理がしたかった。
予算アラートを設定して、費用が閾値を超えた際にPub/Subにメッセージを飛ばして、
メッセージの受信を契機にして「アプリをプログラムで無効にする」ということがしたかった。
どこに詰まったのか
手順通りに関数を設定してデプロイしようとしたら、
ユーザーには関数の作成に必要な、{project_id}@appspot.gserviceaccount.com に対する iam.serviceAccounts.actAs 権限がありません。「gcloud iam service-accounts add-iam-policy-binding {project_id}@appspot.gserviceaccount.com --member=user: --role=roles/iam.serviceAccountUser」を実行すると、この問題を修正できます。
というエラーが表示された。
この辺を参考にしつつ、「IAMと管理>サービスアカウント>{project_id}@appspot.gserviceaccount.com>権限」のユーザに「サービスアカウントユーザ」権限を付与してみた。
その後に、関数をデプロイしようとしても同じエラーになり解決せず。
もしかしたら、権限変更の反映に時間がかかるのかもしれない。
と思いつつ、1時間後くらいに試してみたらデプロイできた。
本当か...?
権限変更しているのにエラーメッセージ同じなのはつらい。「反映中です」くらいにはエラーメッセージを変更して欲しい。
その辺のこともあって、反映待ちで待っていたから解決したのかどうかよくわからない。
最後に
サービスアカウント、ユーザ、メンバー、ロール、この辺のGCPの知識あまりキャッチアップできていないなぁとは思った。
何かをやろうと思った時にひっかかるので、その「何か」の方を優先しているのでちゃんとしたキャッチアップはしていない感じ。