Skip to content

Commit de16195

Browse files
authored
Split terraform config up into multiple files (#940)
Split components with many resources into their own files for readability.
1 parent a91ddd3 commit de16195

7 files changed

Lines changed: 269 additions & 293 deletions

File tree

deployment/terraform/environments/oss-vdb-test/main.tf

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@ module "osv_test" {
55

66
public_import_logs_bucket = "osv-test-public-import-logs"
77
vulnerabilities_export_bucket = "osv-test-vulnerabilities"
8-
9-
resource_location = "US"
10-
resource_region = "us-central1"
11-
worker_zone = "us-central1-f"
128
}
139

1410

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Required APIs
2+
# TODO(michaelkedar): Check whether any required apis are missing.
3+
# TODO(michaelkedar): Add depends_on to enable APIs before any resources are created.
4+
5+
resource "google_project_service" "compute_engine_api" {
6+
project = var.project_id
7+
service = "compute.googleapis.com"
8+
disable_on_destroy = false
9+
}
10+
11+
resource "google_project_service" "kubernetes_engine_api" {
12+
project = var.project_id
13+
service = "container.googleapis.com"
14+
disable_on_destroy = false
15+
}
16+
17+
resource "google_project_service" "redis_api" {
18+
project = var.project_id
19+
service = "redis.googleapis.com"
20+
disable_on_destroy = false
21+
}
22+
23+
resource "google_project_service" "datastore_api" {
24+
project = var.project_id
25+
service = "datastore.googleapis.com"
26+
}
27+
28+
resource "google_project_service" "vpcaccess_api" {
29+
project = var.project_id
30+
service = "vpcaccess.googleapis.com"
31+
disable_on_destroy = false
32+
}
33+
34+
resource "google_project_service" "cloud_run_api" {
35+
project = var.project_id
36+
service = "run.googleapis.com"
37+
disable_on_destroy = false
38+
}
39+
40+
resource "google_project_service" "service_management" {
41+
project = var.project_id
42+
service = "servicemanagement.googleapis.com"
43+
disable_on_destroy = false
44+
}
45+
46+
resource "google_project_service" "service_control" {
47+
project = var.project_id
48+
service = "servicecontrol.googleapis.com"
49+
disable_on_destroy = false
50+
}
51+
52+
resource "google_project_service" "endpoints" {
53+
project = var.project_id
54+
service = "endpoints.googleapis.com"
55+
disable_on_destroy = false
56+
}
Lines changed: 27 additions & 271 deletions
Original file line numberDiff line numberDiff line change
@@ -1,271 +1,6 @@
1-
# TODO(michaelkedar): Organise / refactor logically into multiple tf files
2-
# and possibly add variables for some field values.
3-
4-
# APIs
5-
# TODO(michaelkedar): Check whether any required apis are missing.
6-
# TODO(michaelkedar): Add depends_on to enable APIs before any resources are created.
7-
8-
resource "google_project_service" "compute_engine_api" {
9-
project = var.project_id
10-
service = "compute.googleapis.com"
11-
}
12-
13-
resource "google_project_service" "kubernetes_engine_api" {
14-
project = var.project_id
15-
service = "container.googleapis.com"
16-
}
17-
18-
resource "google_project_service" "redis_api" {
19-
project = var.project_id
20-
service = "redis.googleapis.com"
21-
}
22-
23-
resource "google_project_service" "datastore_api" {
24-
project = var.project_id
25-
service = "datastore.googleapis.com"
26-
}
27-
28-
resource "google_project_service" "vpcaccess_api" {
29-
project = var.project_id
30-
service = "vpcaccess.googleapis.com"
31-
}
32-
33-
resource "google_project_service" "cloud_run_api" {
34-
project = var.project_id
35-
service = "run.googleapis.com"
36-
}
37-
38-
resource "google_project_service" "service_management" {
39-
project = var.project_id
40-
service = "servicemanagement.googleapis.com"
41-
}
42-
43-
resource "google_project_service" "service_control" {
44-
project = var.project_id
45-
service = "servicecontrol.googleapis.com"
46-
}
47-
48-
resource "google_project_service" "endpoints" {
49-
project = var.project_id
50-
service = "endpoints.googleapis.com"
51-
}
52-
53-
# Network
54-
55-
resource "google_compute_subnetwork" "my_subnet_0" {
56-
project = var.project_id
57-
name = "my-subnet-0"
58-
network = "default"
59-
ip_cidr_range = "10.45.32.0/22"
60-
private_ip_google_access = true
61-
region = var.resource_region
62-
}
63-
64-
resource "google_compute_router" "router" {
65-
project = var.project_id
66-
name = "router"
67-
network = "default"
68-
region = var.resource_region
69-
}
70-
71-
resource "google_compute_router_nat" "nat_config" {
72-
project = var.project_id
73-
name = "nat-config"
74-
router = google_compute_router.router.name
75-
source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
76-
nat_ip_allocate_option = "AUTO_ONLY"
77-
region = google_compute_router.router.region
78-
enable_endpoint_independent_mapping = false
79-
}
80-
81-
82-
# Clusters / Node Pools
83-
84-
resource "google_container_cluster" "workers" {
85-
project = var.project_id
86-
name = "workers"
87-
location = var.worker_zone
88-
subnetwork = google_compute_subnetwork.my_subnet_0.self_link
89-
90-
private_cluster_config {
91-
enable_private_endpoint = false
92-
enable_private_nodes = true
93-
master_ipv4_cidr_block = "172.16.0.32/28"
94-
}
95-
96-
# We need to define this for private clusters, but all fields are optional.
97-
ip_allocation_policy {}
98-
99-
provider = google-beta
100-
addons_config {
101-
gce_persistent_disk_csi_driver_config {
102-
enabled = true
103-
}
104-
}
105-
106-
# We can't create a cluster with no node pool defined, but we want to only use
107-
# separately managed node pools. So we create the smallest possible default
108-
# node pool and immediately delete it.
109-
remove_default_node_pool = true
110-
initial_node_count = 1
111-
}
112-
113-
resource "google_container_node_pool" "default_pool" {
114-
project = var.project_id
115-
name = "default-pool"
116-
cluster = google_container_cluster.workers.name
117-
location = google_container_cluster.workers.location
118-
119-
autoscaling {
120-
min_node_count = 1
121-
max_node_count = 1000
122-
}
123-
124-
125-
node_config {
126-
machine_type = "n1-highmem-2"
127-
disk_type = "pd-ssd"
128-
disk_size_gb = 64
129-
local_ssd_count = 1
130-
131-
oauth_scopes = ["https://www.googleapis.com/auth/cloud-platform"]
132-
133-
}
134-
}
135-
136-
resource "google_container_node_pool" "highend" {
137-
project = var.project_id
138-
name = "highend"
139-
cluster = google_container_cluster.workers.name
140-
location = google_container_cluster.workers.location
141-
142-
autoscaling {
143-
min_node_count = 0
144-
max_node_count = 100
145-
}
146-
147-
148-
node_config {
149-
machine_type = "n1-standard-32"
150-
disk_type = "pd-standard"
151-
disk_size_gb = 100
152-
local_ssd_count = 1
153-
154-
oauth_scopes = ["https://www.googleapis.com/auth/cloud-platform"]
155-
156-
labels = {
157-
workloadType = "highend"
158-
}
159-
160-
taint = [{
161-
effect = "NO_EXECUTE"
162-
key = "workloadType"
163-
value = "highend"
164-
}]
165-
166-
}
167-
}
168-
169-
170-
# Pub/Sub topics
171-
172-
resource "google_pubsub_topic" "tasks" {
173-
project = var.project_id
174-
name = "tasks"
175-
176-
labels = {
177-
goog-dm = "pubsub"
178-
}
179-
}
180-
181-
resource "google_pubsub_topic" "failed_tasks" {
182-
project = var.project_id
183-
name = "failed-tasks"
184-
}
185-
186-
resource "google_pubsub_subscription" "tasks" {
187-
project = var.project_id
188-
name = "tasks"
189-
topic = google_pubsub_topic.tasks.id
190-
message_retention_duration = "604800s"
191-
ack_deadline_seconds = 600
192-
193-
dead_letter_policy {
194-
dead_letter_topic = google_pubsub_topic.failed_tasks.id
195-
max_delivery_attempts = 5
196-
}
197-
198-
expiration_policy {
199-
ttl = "" # never expires
200-
}
201-
202-
labels = {
203-
goog-dm = "pubsub"
204-
}
205-
}
206-
207-
resource "google_pubsub_topic" "pypi_bridge" {
208-
project = var.project_id
209-
name = "pypi-bridge"
210-
}
211-
212-
213-
# Service accounts permissions
214-
215-
data "google_compute_default_service_account" "default" {
216-
project = var.project_id
217-
}
218-
219-
data "google_app_engine_default_service_account" "default" {
220-
project = var.project_id
221-
}
222-
223-
resource "google_project_service_identity" "pubsub" {
224-
provider = google-beta
225-
project = var.project_id
226-
service = "pubsub.googleapis.com"
227-
}
228-
229-
resource "google_project_iam_member" "compute_service" {
230-
project = var.project_id
231-
role = "roles/editor"
232-
member = "serviceAccount:${data.google_compute_default_service_account.default.email}"
233-
}
234-
235-
resource "google_project_iam_member" "app_engine_service" {
236-
project = var.project_id
237-
role = "roles/editor"
238-
member = "serviceAccount:${data.google_app_engine_default_service_account.default.email}"
239-
}
240-
241-
resource "google_service_account" "deployment_service" {
242-
project = var.project_id
243-
account_id = "deployment"
244-
display_name = "deployment"
245-
}
246-
247-
resource "google_project_iam_member" "deployment_service" {
248-
project = var.project_id
249-
role = "roles/editor"
250-
member = "serviceAccount:${google_service_account.deployment_service.email}"
251-
}
252-
253-
resource "google_pubsub_subscription_iam_member" "tasks_service_subscriber" {
254-
project = var.project_id
255-
subscription = google_pubsub_subscription.tasks.name
256-
role = "roles/pubsub.subscriber"
257-
member = "serviceAccount:${google_project_service_identity.pubsub.email}"
258-
}
259-
260-
resource "google_pubsub_topic_iam_member" "failed_tasks_service_publisher" {
261-
project = var.project_id
262-
topic = google_pubsub_topic.failed_tasks.name
263-
role = "roles/pubsub.publisher"
264-
member = "serviceAccount:${google_project_service_identity.pubsub.email}"
265-
}
1+
# osv.dev terraform configuration
2662

2673
# App Engine
268-
2694
resource "google_app_engine_application" "app" {
2705
project = var.project_id
2716
location_id = "us-west2"
@@ -307,12 +42,10 @@ resource "google_vpc_access_connector" "connector" {
30742
}
30843

30944
# Storage Buckets
310-
311-
# TODO(michaelkedar): naming of public buckets
31245
resource "google_storage_bucket" "osv_public_import_logs" {
31346
project = var.project_id
31447
name = var.public_import_logs_bucket
315-
location = var.resource_location
48+
location = "US"
31649
uniform_bucket_level_access = true
31750

31851
lifecycle {
@@ -342,10 +75,33 @@ resource "google_storage_bucket" "osv_public_import_logs" {
34275
resource "google_storage_bucket" "osv_vulnerabilities_export" {
34376
project = var.project_id
34477
name = var.vulnerabilities_export_bucket
345-
location = var.resource_location
78+
location = "US"
34679
uniform_bucket_level_access = true
34780

34881
lifecycle {
34982
prevent_destroy = true
35083
}
351-
}
84+
}
85+
86+
# Service account permissions
87+
resource "google_service_account" "deployment_service" {
88+
project = var.project_id
89+
account_id = "deployment"
90+
display_name = "deployment"
91+
}
92+
93+
resource "google_project_iam_member" "deployment_service" {
94+
project = var.project_id
95+
role = "roles/editor"
96+
member = "serviceAccount:${google_service_account.deployment_service.email}"
97+
}
98+
99+
data "google_app_engine_default_service_account" "default" {
100+
project = var.project_id
101+
}
102+
103+
resource "google_project_iam_member" "app_engine_service" {
104+
project = var.project_id
105+
role = "roles/editor"
106+
member = "serviceAccount:${data.google_app_engine_default_service_account.default.email}"
107+
}

0 commit comments

Comments
 (0)