main.tf 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. # Minimal GCP Vertex AI Terraform configuration for Llama deployment
  2. # This creates only the essential resources for Vertex AI model deployment
  3. terraform {
  4. required_version = ">= 1.0"
  5. required_providers {
  6. google = {
  7. source = "hashicorp/google"
  8. version = "~> 6.0"
  9. }
  10. }
  11. }
  12. provider "google" {
  13. project = var.project_id
  14. region = var.region
  15. }
  16. # Local values
  17. locals {
  18. name_prefix = "${var.project_name}-${var.environment}"
  19. # Required APIs for Vertex AI
  20. required_apis = [
  21. "aiplatform.googleapis.com",
  22. "storage.googleapis.com",
  23. "iam.googleapis.com"
  24. ]
  25. }
  26. # Enable required Google Cloud APIs
  27. resource "google_project_service" "vertex_apis" {
  28. for_each = toset(local.required_apis)
  29. project = var.project_id
  30. service = each.value
  31. disable_dependent_services = false
  32. disable_on_destroy = false
  33. }
  34. # Service Account for Vertex AI operations
  35. resource "google_service_account" "vertex_ai_sa" {
  36. account_id = "${local.name_prefix}-vertex-sa"
  37. display_name = "Vertex AI Service Account for ${var.project_name}"
  38. description = "Service account for Vertex AI Llama model deployment"
  39. depends_on = [google_project_service.vertex_apis]
  40. }
  41. # IAM roles for the Vertex AI service account
  42. resource "google_project_iam_member" "vertex_ai_user" {
  43. project = var.project_id
  44. role = "roles/aiplatform.user"
  45. member = "serviceAccount:${google_service_account.vertex_ai_sa.email}"
  46. }
  47. resource "google_project_iam_member" "storage_admin" {
  48. project = var.project_id
  49. role = "roles/storage.admin"
  50. member = "serviceAccount:${google_service_account.vertex_ai_sa.email}"
  51. }
  52. # Cloud Storage bucket for model artifacts
  53. resource "google_storage_bucket" "vertex_artifacts" {
  54. name = "${local.name_prefix}-vertex-artifacts-${random_id.bucket_suffix.hex}"
  55. location = var.region
  56. uniform_bucket_level_access = true
  57. versioning {
  58. enabled = true
  59. }
  60. lifecycle_rule {
  61. condition {
  62. age = var.artifact_retention_days
  63. }
  64. action {
  65. type = "Delete"
  66. }
  67. }
  68. labels = {
  69. project = var.project_name
  70. environment = var.environment
  71. managed-by = "terraform"
  72. }
  73. depends_on = [google_project_service.vertex_apis]
  74. }
  75. # Random ID for bucket naming
  76. resource "random_id" "bucket_suffix" {
  77. byte_length = 4
  78. }
  79. # Optional: Vertex AI Dataset (uncomment if needed)
  80. # resource "google_vertex_ai_dataset" "llama_dataset" {
  81. # display_name = "${local.name_prefix}-dataset"
  82. # metadata_schema_uri = "gs://google-cloud-aiplatform/schema/dataset/metadata/text_1.0.0.yaml"
  83. # region = var.region
  84. #
  85. # depends_on = [google_project_service.vertex_apis]
  86. # }
  87. # Optional: Vertex AI Endpoint (uncomment if needed)
  88. # resource "google_vertex_ai_endpoint" "llama_endpoint" {
  89. # display_name = "${local.name_prefix}-endpoint"
  90. # location = var.region
  91. # description = "Endpoint for Llama model serving"
  92. #
  93. # labels = {
  94. # project = var.project_name
  95. # environment = var.environment
  96. # }
  97. #
  98. # depends_on = [google_project_service.vertex_apis]
  99. # }