👋

Terraformを使ってCloud BuildからCloud Runにデプロイする仕組みを作る

に公開1

Discussion

ハトすけハトすけ

記事ありがとうございます。

ハマったので共有です。

google_cloudbuild_triggerの部分ですが、400エラーがでて失敗してしまいます。

Error: Error creating Trigger: googleapi: Error 400: Request contains an invalid argument.

おそらく、GoogleCloudの仕様変更で CloudBuildのAPIを有効化しても、デフォルトのCloudBuildアカウントが作成されなくなったのが原因かもしれません(間違ってたらすみません)。

stackoverflowを参考にその場でservice_accountを作成してgoogle_cloudbuild_triggerに渡せば、エラーなく通りました。

resource "google_service_account" "cloudbuild_service_account" {
  account_id   = "cloudbuild-sa"
  display_name = "cloudbuild-sa"
  description  = "Cloud build service account"
}

resource "google_project_iam_member" "act_as" {
  project = var.project_id
  role    = "roles/iam.serviceAccountUser"
  member  = "serviceAccount:${google_service_account.cloudbuild_service_account.email}"
}

resource "google_project_iam_member" "logs_writer" {
  project = var.project_id
  role    = "roles/logging.logWriter"
  member  = "serviceAccount:${google_service_account.cloudbuild_service_account.email}"
}

resource "google_cloudbuild_trigger" "github" {
  location = var.region

  repository_event_config {
    repository = google_cloudbuildv2_repository.github_repository.id
    push {
      branch = var.branch_pattern
    }
  }

  filename = var.cloudbuild_file_name

  # これがないと400エラーになる
  # 仕様変更: https://blog.g-gen.co.jp/entry/cloud-build-service-account-changes
  service_account = google_service_account.cloudbuild_service_account.id

  # cloudbuild.yamlで使用できる変数
  substitutions = {
    _REGION                         = var.region
    _ARTIFACT_REPOSITORY_IMAGE_PATH = var.registory_path
  }
}

参考:
https://blog.g-gen.co.jp/entry/cloud-build-service-account-changes
https://stackoverflow.com/questions/76352037/error-400-request-contains-an-invalid-argument-while-creating-google-cloudbuild