terraformからIAMを作成する時に Error retrieving IAM policy for project ~ googleapi: Error 403: The caller does not have permission

terraformからIAMを作成するために以下のようなコードを書いた。

resource "google_service_account" "scheduler_invoker" {
  display_name = "Schedler Invoker"
  account_id   = "scheduler-invoker"
}

resource "google_project_iam_member" "run_invoker" {
  role = "roles/run.invoker"
  member = "serviceAccount:${google_service_account.scraping_scheduler_invoker.email}"
  project = var.project
}

これで apply すると以下のようなエラーが出た。

Request `Create IAM Members roles/run.invoker serviceAccount:~"` returned error: Error retrieving IAM policy for project "~": googleapi: Error 403: The caller does not have permission, forbidden

IAMポリシーをいじるためのロールが terraform の credentials に渡したIAMに存在しない。

IAMに「Project IAM 管理者」を付与すると解決する。

ReactNativeでデバッグ用apkファイルを作成する

プロジェクトルートで

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
cd android
./gradlew assembleDebug

yourProject/android/app/build/outputs/apk/debug/app-debug.apk にapkファイルが作成される。

TerraformでGCPのCloud SQL(postgres)のtierを指定するときのポイント

TerraformでGCPのCloud SQLをpostgresで立てようと思った。

CPUやメモリなどを含んだマシンタイプを指定する必要があるが、今までは db-f1-micro のようにGCPがデフォルトで提供しているタイプを使用していた。

tier = "db-f1-micro"

これを db-lightweight-1 に変えてapplyしたのだが、変更することができなかった。

Terraform Registry

これによると、

Postgres supports only shared-core machine types, and custom machine types such as db-custom-2-13312.

とのことで、共有コアのマシンタイプのものしか指定できず、それ以外の場合はカスタムマシンタイプにする必要がある。

「db-custom-CPU数-メモリ量」で表すことはできるが、なんでも数値を入れることができるわけではなく、

CPU の数とメモリの量を選択する際、選択する構成にはいくつかの制限があります。

vCPU は 1 または 2~96 の間の偶数にする必要があります。

メモリは次の条件を満たす必要があります。

vCPU あたり 0.9~6.5 GB 256 MB の倍数 3.75 GB(3,840 MB)以上

この条件を満たしていなければならない。

インスタンスの設定について  |  Cloud SQL for MySQL  |  Google Cloud

なのでカスタムマシンタイプを指定する場合の最小構成は db-custom-1-3840 ということになる。

Prismaのデプロイで Error: P3009 migrate found failed migrations in the target database, new migrations will not be applied. が出たので対処した

Cloud SQLprisma deploy した時に

Error: P3009 migrate found failed migrations in the target database, new migrations will not be applied. ...

The `20220515100619_foo` migration started at ...

というエラーが出た。

このエラーが出たマイグレーションは NOT NULL なカラムを追加するものだったのだが、そのテーブルが既にデータを持っていたので失敗してしまっていた。

手動でテーブルからデータを削除して再度デプロイを試みたが失敗した。

解決法

_prisma_migrationsテーブルから該当のマイグレーションの履歴を削除して再度ビルドする。

SELECT id FROM _prisma_migrations where migration_name='20220515100619_foo';

DELETE FROM _prisma_migrations where id='<ID>';

react-native-google-fitを開発用で使えるようにする

ReactNativeを使っているアプリで react-native-google-fit を用いて Google Fit と連携したかったが、開発用で使用可能にするためのプロセスで若干ハマったので備忘録。

GitHub - StasDoskalenko/react-native-google-fit: A React Native bridge module for interacting with Google Fit

まず普通にインストール

yarn add react-native-google-fit

Client ID を取得するのに必要な certificate's SHA-1 fingerprint を表示

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android

すると、SHA1: から始まるラインがあるので、そのSHA:1以降の情報をコピーする。

GCPに移動し、APIをEnabledにする。

メニューから APIs & Services を選択しページを表示。

上部の + CREATE CREDENTIALS をクリック。

OAuth client IDを選択。

ApplicationはAndroidを選択。

SHA-1 certificate fingerprint を入力する欄があるので先ほどコピーしたものを入力。

CREATE で作成。

OAuth 2.0 Client IDs に作成したものが表紙されていることを確認。

アプリを再度ビルド。

これでGoogle Fit と連携することができた。

react-native-google-fitのリポジトリにはテストユーザーの追加や、新規 debug.keystore の発行などのプロセスも書かれているが、自分は上記の手順でセットアップすることができた。

参照

Get an OAuth 2.0 Client ID  |  Google Fit  |  Google Developers

react-native-google-fit/INSTALLATION.md at master · StasDoskalenko/react-native-google-fit · GitHub