@@ -37,21 +37,13 @@ module "project-services" {
37
37
" config.googleapis.com" ,
38
38
" datacatalog.googleapis.com" ,
39
39
" datalineage.googleapis.com" ,
40
- " eventarc.googleapis.com" ,
41
- " pubsub.googleapis.com" ,
42
40
" serviceusage.googleapis.com" ,
43
41
" storage.googleapis.com" ,
44
42
" storage-api.googleapis.com" ,
45
43
" workflows.googleapis.com" ,
46
44
]
47
45
48
46
activate_api_identities = [
49
- {
50
- api = " pubsub.googleapis.com"
51
- roles = [
52
- " roles/iam.serviceAccountTokenCreator" ,
53
- ]
54
- },
55
47
{
56
48
api = " workflows.googleapis.com"
57
49
roles = [
@@ -61,18 +53,18 @@ module "project-services" {
61
53
]
62
54
}
63
55
56
+ # Wait after APIs are enabled to give time for them to spin up
64
57
resource "time_sleep" "wait_after_apis" {
65
58
create_duration = " 90s"
66
59
depends_on = [module . project-services ]
67
60
}
68
61
69
- // Create random ID to be used for deployment uniqueness
62
+ # Create random ID to be used for deployment uniqueness
70
63
resource "random_id" "id" {
71
64
byte_length = 4
72
65
}
73
66
74
67
# Set up Storage Buckets
75
-
76
68
# # Set up the raw storage bucket
77
69
resource "google_storage_bucket" "raw_bucket" {
78
70
name = " ds-edw-raw-${ random_id . id . hex } "
@@ -88,120 +80,10 @@ resource "google_storage_bucket" "raw_bucket" {
88
80
labels = var. labels
89
81
}
90
82
91
- # # Set up the provisioning storage bucket
92
- resource "google_storage_bucket" "provisioning_bucket" {
93
- name = " ds-edw-provisioner-${ random_id . id . hex } "
94
- project = module. project-services . project_id
95
- location = var. region
96
- uniform_bucket_level_access = true
97
- force_destroy = var. force_destroy
98
-
99
- public_access_prevention = " enforced"
100
-
101
- depends_on = [time_sleep . wait_after_apis ]
102
-
103
- labels = var. labels
104
- }
105
-
106
- // Create Eventarc Trigger
107
- # # Create a Pub/Sub topic.
108
- resource "google_pubsub_topic" "topic" {
109
- name = " provisioning-topic"
110
- project = module. project-services . project_id
111
-
112
- depends_on = [time_sleep . wait_after_apis ]
113
-
114
- labels = var. labels
115
- }
116
-
117
- resource "google_pubsub_topic_iam_binding" "binding" {
118
- project = module. project-services . project_id
119
- topic = google_pubsub_topic. topic . id
120
- role = " roles/pubsub.publisher"
121
- members = [" serviceAccount:${ data . google_storage_project_service_account . gcs_account . email_address } " ]
122
- }
123
-
124
- # # Get the GCS service account to trigger the pub/sub notification
125
- data "google_storage_project_service_account" "gcs_account" {
126
- project = module. project-services . project_id
127
-
128
- depends_on = [time_sleep . wait_after_apis ]
129
- }
130
-
131
- # # Create the Storage trigger
132
- resource "google_storage_notification" "notification" {
133
- provider = google
134
- bucket = google_storage_bucket. provisioning_bucket . name
135
- payload_format = " JSON_API_V1"
136
- topic = google_pubsub_topic. topic . id
137
- depends_on = [
138
- google_pubsub_topic_iam_binding . binding ,
139
- ]
140
- }
141
-
142
- # # Create the Eventarc trigger
143
- resource "google_eventarc_trigger" "trigger_pubsub_tf" {
144
- project = module. project-services . project_id
145
- name = " trigger-pubsub-tf"
146
- location = var. region
147
- matching_criteria {
148
- attribute = " type"
149
- value = " google.cloud.pubsub.topic.v1.messagePublished"
150
-
151
- }
152
- destination {
153
- workflow = google_workflows_workflow. workflow . id
154
- }
155
-
156
- transport {
157
- pubsub {
158
- topic = google_pubsub_topic. topic . id
159
- }
160
- }
161
- service_account = google_service_account. eventarc_service_account . email
162
-
163
- labels = var. labels
164
-
165
- depends_on = [
166
- google_project_iam_member . eventarc_service_account_invoke_role ,
167
- ]
168
- }
169
-
170
- # Set up Eventarc service account for the Trigger to execute as
171
- # # Set up the Eventarc service account
172
- resource "google_service_account" "eventarc_service_account" {
173
- project = module. project-services . project_id
174
- account_id = " eventarc-sa-${ random_id . id . hex } "
175
- display_name = " Service Account for Cloud Eventarc"
176
-
177
- depends_on = [time_sleep . wait_after_apis ]
178
- }
179
-
180
- # # Grant the Eventarc service account Workflow Invoker Access
181
- resource "google_project_iam_member" "eventarc_service_account_invoke_role" {
182
- project = module. project-services . project_id
183
- role = " roles/workflows.invoker"
184
- member = " serviceAccount:${ google_service_account . eventarc_service_account . email } "
185
- }
186
-
187
- // Sleep for 120 seconds to drop start file
188
- resource "time_sleep" "wait_to_startfile" {
189
- depends_on = [
190
- google_storage_notification . notification ,
191
- google_eventarc_trigger . trigger_pubsub_tf ,
192
- google_workflows_workflow . workflow
193
- ]
194
-
83
+ # Sleep for 120 seconds to allow the workflow to execute and finish setup
84
+ resource "time_sleep" "wait_after_workflow_execution" {
195
85
create_duration = " 120s"
196
- }
197
-
198
- // Drop start file for workflow to execute
199
- resource "google_storage_bucket_object" "startfile" {
200
- bucket = google_storage_bucket. provisioning_bucket . name
201
- name = " startfile"
202
- source = " ${ path . module } /src/startfile"
203
-
204
86
depends_on = [
205
- time_sleep . wait_to_startfile
87
+ data . http . call_workflows_setup ,
206
88
]
207
89
}
0 commit comments