Initial setup of a cloud function.
parent
b0bc1c1520
commit
e3b6049f60
@ -0,0 +1 @@
|
|||||||
|
This folder will get populated with zip files of the source code for the cloud functions.
|
@ -0,0 +1,71 @@
|
|||||||
|
variable "project" {
|
||||||
|
description = "Project ID."
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "region" {
|
||||||
|
description = "Region."
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "source_bucket" {
|
||||||
|
description = "Google storage bucket where the source code will be stored."
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "function_source_name" {
|
||||||
|
description = "Name of the folder containing the source code for the function."
|
||||||
|
type = string
|
||||||
|
default = "cf_to_pubsub"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "service_cloudbuild" {
|
||||||
|
description = "THe cloudbuild google_project_service."
|
||||||
|
}
|
||||||
|
|
||||||
|
output "https_trigger_url" {
|
||||||
|
description = "https endpoint for the cloud function."
|
||||||
|
value = google_cloudfunctions_function.function.https_trigger_url
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "random_id" "cf_bucket_id" {
|
||||||
|
byte_length = 4
|
||||||
|
}
|
||||||
|
|
||||||
|
data "archive_file" "source_archive" {
|
||||||
|
type = "zip"
|
||||||
|
source_dir = "${path.module}/functions/${var.function_source_name}"
|
||||||
|
output_path = "${path.module}/built/${var.function_source_name}.zip"
|
||||||
|
excludes = [".python-version"]
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "google_storage_bucket_object" "remote_archive" {
|
||||||
|
name = "${var.function_source_name}-${data.archive_file.source_archive.output_base64sha256}.zip"
|
||||||
|
bucket = var.source_bucket.name
|
||||||
|
source = data.archive_file.source_archive.output_path
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "google_cloudfunctions_function" "function" {
|
||||||
|
name = "cf-to-pubsub"
|
||||||
|
description = "CloudFunction to PubSub"
|
||||||
|
runtime = "python39"
|
||||||
|
|
||||||
|
available_memory_mb = 128
|
||||||
|
source_archive_bucket = var.source_bucket.name
|
||||||
|
source_archive_object = google_storage_bucket_object.remote_archive.name
|
||||||
|
trigger_http = true
|
||||||
|
entry_point = "main"
|
||||||
|
|
||||||
|
depends_on = [
|
||||||
|
var.service_cloudbuild
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
# Allow unauthenticated access over http
|
||||||
|
resource "google_cloudfunctions_function_iam_member" "invoker" {
|
||||||
|
project = google_cloudfunctions_function.function.project
|
||||||
|
region = google_cloudfunctions_function.function.region
|
||||||
|
cloud_function = google_cloudfunctions_function.function.name
|
||||||
|
|
||||||
|
role = "roles/cloudfunctions.invoker"
|
||||||
|
member = "allUsers"
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
def push_to_pubsub(request_params):
|
||||||
|
print(json.dumps(request_params))
|
||||||
|
|
||||||
|
|
||||||
|
def main(request):
|
||||||
|
request_json = request.get_json(silent=True)
|
||||||
|
request_args = request.args
|
||||||
|
|
||||||
|
if request_json:
|
||||||
|
push_to_pubsub(request_json)
|
||||||
|
elif request_args:
|
||||||
|
push_to_pubsub(request_args)
|
||||||
|
else:
|
||||||
|
raise Exception("No data provided.")
|
||||||
|
return {"status": "ok"}
|
@ -0,0 +1 @@
|
|||||||
|
Flask==1.1.2
|
Loading…
Reference in New Issue