@@ -891,9 +891,31 @@ resource "google_cloudfunctions2_function" "export_csv" {
891891 }
892892 }
893893 }
894+ }
894895
896+ resource "google_cloud_scheduler_job" "export_csv_scheduler" {
897+ name = " export-csv-scheduler-${ var . environment } "
898+ description = " Schedule the export_csv function"
899+ time_zone = " Etc/UTC"
900+ schedule = var. export_csv_schedule
901+ region = var. gcp_region
902+ paused = var. environment == " prod" ? false : true
903+ depends_on = [google_cloudfunctions2_function . export_csv , google_cloudfunctions2_function_iam_member . export_csv_invoker ]
904+ http_target {
905+ http_method = " POST"
906+ uri = google_cloudfunctions2_function. export_csv . url
907+ oidc_token {
908+ service_account_email = google_service_account. functions_service_account . email
909+ }
910+ headers = {
911+ " Content-Type" = " application/json"
912+ }
913+ }
914+ # Export CSV can take several minutes to run (5?) so we need to give it a longer deadline
915+ attempt_deadline = " 600s"
895916}
896917
918+
897919# IAM entry for all users to invoke the function
898920resource "google_cloudfunctions2_function_iam_member" "tokens_invoker" {
899921 project = var. project_id
@@ -1050,4 +1072,12 @@ resource "google_project_iam_member" "datastore_owner" {
10501072 project = var. project_id
10511073 role = " roles/datastore.owner"
10521074 member = " serviceAccount:${ google_service_account . functions_service_account . email } "
1075+ }
1076+
1077+ resource "google_cloudfunctions2_function_iam_member" "export_csv_invoker" {
1078+ project = var. project_id
1079+ location = var. gcp_region
1080+ cloud_function = google_cloudfunctions2_function. export_csv . name
1081+ role = " roles/cloudfunctions.invoker"
1082+ member = " serviceAccount:${ google_service_account . functions_service_account . email } "
10531083}
0 commit comments