LoginSignup
1
0

More than 1 year has passed since last update.

GAE / Cloud Functions + Datastore + Goで“rpc error: code = PermissionDenied desc = Missing or insufficient permissions.” エラー

Posted at

今回は特殊な要件で作業していたので、珍しいエラーを引きました。0から構築した場合は発生しないのでケースは多くないと思いますがメモとして残しておきます。

概要

GAEとDatastoreを利用したGoのサンプルプログラムがありました。これをバージョンアップ・修正しデプロイしようとしたところ、表題のエラーになりました。

$ gcloud app deploy --project {プロジェクトID} --version {バージョン} .
...
(デプロイは成功する)

デプロイしたプログラムの動作確認のためにブラウザからアクセスすると、下記のエラーメッセージが表示されます。

rpc error: code = PermissionDenied desc = Missing or insufficient permissions.
権限不足というエラーメッセージと、下記のstackoverflowのポストを見て、なにかしらの権限が不足しているのではないかと思い調べましたが、違うところに原因がありました。
https://stackoverflow.com/questions/61651865/getting-error-message-rpc-error-code-permissiondenied-desc-missing-or-ins

原因と対処法

サンプルプログラムの中にGCPのプロジェクトIDがハードコードされており、別のプロジェクトにデプロイしようとしたところエラーが発生していたことがわかりました。ハードコードされた部分を修正し、今回のデプロイ対象のプロジェクトIDを指定することでエラーが解消されました。

また、デプロイ対象と異なるプロジェクトIDをプログラム内で指定すると、同じエラーがGoogle CloudFunctionsでも発生しました。

プログラムの中にプロジェクトIDをハードコードしていると、今回のような場合に気づくのが難しいため、環境変数からプロジェクトIDを読みこむようにプログラムを修正するのが望ましいです。GAEの場合、 GOOGLE_CLOUD_PROJECT という環境変数に実行環境のGCP プロジェクトIDが入るので、プログラム内でプロジェクトIDを直接指定するのではなく、os.Getenv("GOOGLE_CLOUD_PROJECT")のような形でプロジェクトIDを読むようにします。
https://cloud.google.com/appengine/docs/standard/go/runtime#environment_variables

1
0
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
1
0