キャッチアップしたこと、したいこと

AWSでのcloud front, S3の静的サイトのインフラ構築やったことがあったけど、GCP側も大体同じような感じだった。
次はcloud runとかのコンテナの構築をやりたい。

SPAの場合にダイレクトURLでアクセスをすると、
GET https://dev.dashboard.my-learn-iac-sample.site/todos 404 (Not Found)
が出る。結構頑張ったら無理な気がしており、一旦スルー対応。awsのS3でやった時は問題なかった気がするが勘違いだろうか。。
こういうの気になるので、時間があるときになんとかしたい。
# Cloud Storageバケット(静的ウェブサイトホスティング)
resource "google_storage_bucket" "dashboard_frontend" {
name = var.bucket_name
location = var.region
force_destroy = false # 誤った削除を防ぐ
# 静的ウェブサイトホスティング用の設定
website {
main_page_suffix = "index.html"
not_found_page = "index.html" # これだとだめみたい。
}
# セキュリティ設定
public_access_prevention = "inherited"
uniform_bucket_level_access = true
# ラベル設定
labels = {
purpose = "dashboard-frontend"
managed_by = "terraform"
}
}

MSW
モックがあんまり好きじゃないので今まで触ってこなかったけど、改めて触っておきたいかも

Turborepo

Google DriveのようなUIで複数ファイルタイプの一括アップロードとかをやってみたい

AI OCR
AIで読み取って反映をさせるの自分でプログラム書いときたい。

多重でのリクエスト対策

こんな感じでterraformでディレクトリ設計したけど、微妙だった。
- gcpという括りは要らなかったかも
- sharedいらない。
- dev, prod等の配下にapi, backendとかで分けてけど、リソースを移動をすることが多くて面倒なことが多かった。
- 小規模前提で考えると基本main.tfだけで良さそう。
.
└── gcp
└── environments
├── CLAUDE.local.md
├── dev
│ ├── api
│ │ ├── backend.tf
│ │ ├── cloudrun.tf
│ │ ├── cloudsql.tf
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ ├── terraform.tfvars
│ │ └── variables.tf
│ ├── backend
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ ├── terraform.tfstate
│ │ ├── terraform.tfstate.backup
│ │ ├── terraform.tfvars
│ │ └── variables.tf
│ ├── dashboard
│ │ ├── backend.tf
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ ├── terraform.tfvars
│ │ └── variables.tf
│ ├── shared
│ │ ├── apis.tf
│ │ ├── backend.tf
│ │ ├── certificate_map.tf
│ │ ├── firewall.tf
│ │ ├── iam.tf
│ │ ├── main.tf
│ │ ├── network.tf
│ │ ├── outputs.tf
│ │ ├── terraform.tfstate.backup
│ │ ├── terraform.tfvars
│ │ ├── variables.tf
│ │ └── workload-identity.tf
│ └── turbo-cache
│ ├── backend.tf
│ ├── main.tf
│ ├── outputs.tf
│ ├── terraform.tfvars
│ └── variables.tf
└── prod
├── api
│ ├── backend.tf
│ ├── cloudrun.tf
│ ├── cloudsql.tf
│ ├── loadbalancer.tf
│ ├── main.tf
│ ├── outputs.tf
│ ├── terraform.tfvars
│ └── variables.tf
├── backend
│ ├── main.tf
│ ├── outputs.tf
│ ├── terraform.tfstate
│ ├── terraform.tfstate.backup
│ ├── terraform.tfvars
│ └── variables.tf
├── dashboard
│ ├── backend.tf
│ ├── main.tf
│ ├── outputs.tf
│ ├── terraform.tfvars
│ └── variables.tf
└── shared
├── apis.tf
├── backend.tf
├── certificate_map.tf
├── iam.tf
├── main.tf
├── network.tf
├── outputs.tf
├── terraform.tfvars
├── variables.tf
└── workload-identity.tf

terraformとGCP周りのあれこれ
GCPで組織がある。google workfspaceを作ったアカウントでgcpのプロジェクトを作ると勝手に組織の下にできるみたい。こういうことを組織として大元で制御ができるみたい。
具体的なユースケース
- セキュリティ強化
❌ 問題: 開発者がService Account Keyを作成してGitにコミット
✅ 解決: 組織全体でService Account Key作成を禁止
- コンプライアンス対応
❌ 問題: 機密データが海外リージョンに保存される
✅ 解決: 組織ポリシーで日本リージョンのみ許可
- コスト管理
❌ 問題: 高額なVMインスタンスが乱立
✅ 解決: 作成可能なマシンタイプを制限
- 運用統制
❌ 問題: 各チームが勝手にネットワーク設定
✅ 解決: VPC作成を管理者のみに制限

terraformで以下のエラーが出た。
なんで?と思ったら、constraints/iam.disableServiceAccountKeyCreation
というのが組織の設定であった。
constraints
が組織のポリシーに対してprefixみたい。
│ Error: Error creating service account key: googleapi: Error 400: Key creation is not allowed on this service account.
│ Details:
│ [
│ {
│ "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
│ "violations": [
│ {
│ "description": "Key creation is not allowed on this service account.",
│ "subject": "projects/my-second-dev/serviceAccounts/github-actions-deployer@my-second-dev.iam.gserviceaccount.com?configvalue=github-actions-deployer%40my-second-dev.iam.gserviceaccount.com",
│ "type": "constraints/iam.disableServiceAccountKeyCreation"
│ }
│ ]
│ }
│ ]
│ , failedPrecondition
│
│ with module.shared.google_service_account_key.github_actions_key,
│ on ../../modules/shared/main.tf line 148, in resource "google_service_account_key" "github_actions_key":
│ 148: resource "google_service_account_key" "github_actions_key" {
│
╵

この辺りの組織を使った設定ってそこまでやらなくてもいいかもしれない。

フォルダについても小規模な企業を想定して、あまりフォルダで事業部Aフォルダ, 事業部Bフォルダのようなことは一旦考えずに触れるようになった方が良さそう。
頭がこんがらがる

github で複数のアカウントを使っているときの切り替え
いつも忘れる。
を参考にしている。
下記の設定をしておく、sshkeyを生成をしてgithub側で登録
#メインアカウント
Host github #任意のホスト名
HostName github.com
IdentityFile ~/.ssh/id_rsa #メインアカウントの鍵のファイル
User git
Port 22
TCPKeepAlive yes
IdentitiesOnly yes
#サブアカウント
Host github-sub #任意のホスト名
HostName github.com
IdentityFile ~/.ssh/id_sub_rsa #サブアカウントの鍵のファイル
User git
Port 22
TCPKeepAlive yes
IdentitiesOnly yes
以下のようにしてhost部分を変える。
git clone git@github.com:rakushite-inc/gcp-organization-terraform.git
👇
git clone git@github-sub:rakushite-inc/gcp-organization-terraform.git
cloneをすると成功をする

以下キャッチアップをしたが、結構良さげ

sentry周りの導入は大体他の人にやってもらっているが自分で色々と設定をして検証をした方がいいかもしれない。