forked from wandb/terraform-google-wandb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.tf
169 lines (145 loc) · 5.76 KB
/
main.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
module "project_factory_project_services" {
source = "terraform-google-modules/project-factory/google//modules/project_services"
version = "~> 13.0"
project_id = null
disable_dependent_services = false
disable_services_on_destroy = false
activate_apis = [
"iam.googleapis.com", // Service accounts
"logging.googleapis.com", // Logging
"sqladmin.googleapis.com", // Database
"networkmanagement.googleapis.com", // Networking
"servicenetworking.googleapis.com", // Networking
"redis.googleapis.com", // Redis
"pubsub.googleapis.com", // File Storage
"storage.googleapis.com", // Cloud Storage
"cloudkms.googleapis.com", // KMS
"compute.googleapis.com", // required for datadog monitoring
"cloudasset.googleapis.com" // required for datadog monitoring
]
}
locals {
fqdn = var.subdomain == null ? var.domain_name : "${var.subdomain}.${var.domain_name}"
url_prefix = var.ssl ? "https" : "http"
url = "${local.url_prefix}://${local.fqdn}"
internal_app_port = 32543
create_bucket = var.bucket_name == ""
create_network = var.network == null
}
module "service_accounts" {
source = "./modules/service_accounts"
namespace = var.namespace
bucket_name = var.bucket_name
depends_on = [module.project_factory_project_services]
}
module "kms" {
# KMS is currently only used to encrypt pubsub queue. Disable it if we dont use it.
count = var.use_internal_queue ? 0 : 1
source = "./modules/kms"
namespace = var.namespace
deletion_protection = var.deletion_protection
}
locals {
crypto_key = var.use_internal_queue ? null : module.kms.0.crypto_key
}
module "storage" {
count = local.create_bucket ? 1 : 0
source = "./modules/storage"
namespace = var.namespace
labels = var.labels
create_queue = !var.use_internal_queue
bucket_location = "US"
service_account = module.service_accounts.service_account
crypto_key = local.crypto_key
deletion_protection = var.deletion_protection
depends_on = [module.project_factory_project_services]
}
module "networking" {
count = local.create_network ? 1 : 0
source = "./modules/networking"
namespace = var.namespace
depends_on = [module.project_factory_project_services]
}
locals {
network_connection = try(module.networking.0.connection, { network = var.network })
network = try(module.networking.0.network, { self_link = var.network })
subnetwork = try(module.networking.0.subnetwork, { self_link = var.subnetwork })
}
module "app_gke" {
source = "./modules/app_gke"
namespace = var.namespace
machine_type = var.gke_machine_type
network = local.network
subnetwork = local.subnetwork
service_account = module.service_accounts.service_account
depends_on = [module.project_factory_project_services]
}
module "app_lb" {
source = "./modules/app_lb"
namespace = var.namespace
ssl = var.ssl
fqdn = local.fqdn
network = local.network
group = module.app_gke.instance_group_url
service_account = module.service_accounts.service_account
labels = var.labels
allowed_inbound_cidrs = var.allowed_inbound_cidrs
depends_on = [module.project_factory_project_services, module.app_gke]
}
module "database" {
source = "./modules/database"
namespace = var.namespace
database_version = var.database_version
force_ssl = var.force_ssl
tier = var.database_machine_type
sort_buffer_size = var.database_sort_buffer_size
network_connection = local.network_connection
deletion_protection = var.deletion_protection
labels = var.labels
depends_on = [module.project_factory_project_services]
}
module "redis" {
count = var.create_redis ? 1 : 0
source = "./modules/redis"
namespace = var.namespace
memory_size_gb = 4
network = local.network
labels = var.labels
}
locals {
redis_certificate = var.create_redis ? module.redis.0.ca_cert : null
redis_connection_string = var.create_redis ? "redis://:${module.redis.0.auth_string}@${module.redis.0.connection_string}?tls=true&ttlInSeconds=604800&caCertPath=/etc/ssl/certs/server_ca.pem" : null
bucket = local.create_bucket ? module.storage.0.bucket_name : var.bucket_name
bucket_queue = var.use_internal_queue ? "internal://" : "pubsub:/${module.storage.0.bucket_queue_name}"
}
module "gke_app" {
source = "wandb/wandb/kubernetes"
version = "1.13.0"
license = var.license
host = local.url
bucket = "gs://${local.bucket}"
bucket_queue = local.bucket_queue
database_connection_string = module.database.connection_string
redis_connection_string = local.redis_connection_string
redis_ca_cert = local.redis_certificate
oidc_client_id = var.oidc_client_id
oidc_issuer = var.oidc_issuer
oidc_auth_method = var.oidc_auth_method
oidc_secret = var.oidc_secret
local_restore = var.local_restore
other_wandb_env = merge({
"GORILLA_DISABLE_CODE_SAVING" = var.disable_code_saving
}, var.other_wandb_env)
wandb_image = var.wandb_image
wandb_version = var.wandb_version
resource_limits = var.resource_limits
resource_requests = var.resource_requests
# If we dont wait, tf will start trying to deploy while the work group is
# still spinning up
depends_on = [
module.database,
module.redis,
module.storage,
module.app_gke
]
}