From fc1e162f3b39b6c5f45e0bddbe339f80f9fdd0c8 Mon Sep 17 00:00:00 2001 From: justinschuldt Date: Thu, 4 Nov 2021 03:43:43 -0500 Subject: [PATCH] devnet: simplify cloud function setup Change-Id: I931501aa5162569785cb078a546dc44a3741de08 commit-id:26e9ff05 --- Tiltfile | 72 +++---------------- devnet/bigtable.yaml | 14 ++-- event_database/cloud_functions/Dockerfile | 11 +++ event_database/cloud_functions/Dockerfile.run | 5 -- event_database/cloud_functions/cmd/main.go | 34 +++++---- 5 files changed, 49 insertions(+), 87 deletions(-) create mode 100644 event_database/cloud_functions/Dockerfile delete mode 100644 event_database/cloud_functions/Dockerfile.run diff --git a/Tiltfile b/Tiltfile index 2f00873f7..f0340a6c8 100644 --- a/Tiltfile +++ b/Tiltfile @@ -327,63 +327,7 @@ if e2e: # bigtable -def build_cloud_function(container_name, go_func_name, path, builder): - # Invokes Tilt's custom_build(), with a Pack command. - # inspired by https://github.com/tilt-dev/tilt-extensions/tree/master/pack - tag = "latest" - caching_ref = container_name + ":" + tag - - pack_build_cmd = " ".join([ - "./tools/bin/pack build", - caching_ref, - "--path " + path, - "--builder " + builder, - "--run-image devnet-cloud-function", - "--env " + "GOOGLE_FUNCTION_TARGET=%s" % go_func_name, - "--env " + "GOOGLE_FUNCTION_SIGNATURE_TYPE=http", - ]) - - disable_push = True - skips_local_docker = True - if ci: - # inherit the DOCKER_HOST socket provided by custom_build. - pack_build_cmd = pack_build_cmd + " --docker-host inherit" - - # do not attempt to access Docker cache in CI - # pack_build_cmd = pack_build_cmd + " --clear-cache" - # don't try to pull previous container versions in CI - pack_build_cmd = pack_build_cmd + " --pull-policy never" - - # push to kubernetes registry - disable_push = False - skips_local_docker = False - - docker_tag_cmd = "tilt docker -- tag " + caching_ref + " $EXPECTED_REF" - custom_build( - container_name, - pack_build_cmd + " && " + docker_tag_cmd, - [path], - tag = tag, - skips_local_docker = skips_local_docker, - disable_push = disable_push, - ) - if explorer: - local_resource( - name = "devnet-cloud-function", - cmd = "tilt docker -- build -f ./event_database/cloud_functions/Dockerfile.run . -t devnet-cloud-function --label builtby=tilt", - env = {"DOCKER_BUILDKIT": "1"}, - labels = ["explorer"], - trigger_mode = trigger_mode, - ) - - local_resource( - name = "pack-bin", - cmd = "go build -mod=readonly -o bin/pack github.com/buildpacks/pack/cmd/pack", - dir = "tools", - labels = ["explorer"], - trigger_mode = trigger_mode, - ) k8s_yaml_with_ns("devnet/bigtable.yaml") @@ -394,16 +338,18 @@ if explorer: trigger_mode = trigger_mode, ) - build_cloud_function( - container_name = "bigtable-functions", - go_func_name = "Entry", - path = "./event_database/cloud_functions", - builder = "gcr.io/buildpacks/builder:v1", + docker_build( + ref = "cloud-functions", + context = "./event_database/cloud_functions", + dockerfile = "./event_database/cloud_functions/Dockerfile", + live_update = [ + sync("./event_database/cloud_functions", "/app"), + ], ) k8s_resource( - "bigtable-functions", + "cloud-functions", resource_deps = ["proto-gen", "bigtable-emulator"], - port_forwards = [port_forward(8090, name = "BigTable Functions [:8090]", host = webHost)], + port_forwards = [port_forward(8090, name = "Cloud Functions [:8090]")], labels = ["explorer"], trigger_mode = trigger_mode, ) diff --git a/devnet/bigtable.yaml b/devnet/bigtable.yaml index 11b1b2eba..6240ecf91 100644 --- a/devnet/bigtable.yaml +++ b/devnet/bigtable.yaml @@ -79,22 +79,22 @@ apiVersion: apps/v1 kind: StatefulSet metadata: labels: - app: bigtable-functions - name: bigtable-functions + app: cloud-functions + name: cloud-functions spec: - serviceName: bigtable-functions + serviceName: cloud-functions replicas: 1 selector: matchLabels: - app: bigtable-functions + app: cloud-functions template: metadata: labels: - app: bigtable-functions + app: cloud-functions spec: containers: - - name: bigtable-functions - image: bigtable-functions + - name: cloud-functions + image: cloud-functions env: - name: BIGTABLE_EMULATOR_HOST value: bigtable-emulator:8086 diff --git a/event_database/cloud_functions/Dockerfile b/event_database/cloud_functions/Dockerfile new file mode 100644 index 000000000..b31a4052d --- /dev/null +++ b/event_database/cloud_functions/Dockerfile @@ -0,0 +1,11 @@ +# syntax=docker.io/docker/dockerfile:experimental@sha256:de85b2f3a3e8a2f7fe48e8e84a65f6fdd5cd5183afa6412fff9caa6871649c44 +FROM docker.io/golang:1.17.0@sha256:06e92e576fc7a7067a268d47727f3083c0a564331bfcbfdde633157fc91fb17d + +WORKDIR /app + +ADD . . + +RUN --mount=type=cache,target=/root/.cache --mount=type=cache,target=/go \ + go build -mod=readonly -o /functions cmd/main.go + +CMD ["/functions"] diff --git a/event_database/cloud_functions/Dockerfile.run b/event_database/cloud_functions/Dockerfile.run deleted file mode 100644 index 6f0a75d35..000000000 --- a/event_database/cloud_functions/Dockerfile.run +++ /dev/null @@ -1,5 +0,0 @@ -# syntax=docker.io/docker/dockerfile:1.3@sha256:42399d4635eddd7a9b8a24be879d2f9a930d0ed040a61324cfdf59ef1357b3b2 -FROM gcr.io/buildpacks/gcp/run@sha256:04f2e841ebbcc140c9f817e274caf8ae8ae0341008c4e01d8ef84cb8aa8c312a - -# the "builtby=tilt" label is how Tilt determines which containters can be purged. -LABEL builtby=tilt diff --git a/event_database/cloud_functions/cmd/main.go b/event_database/cloud_functions/cmd/main.go index 963f7269a..c18761822 100644 --- a/event_database/cloud_functions/cmd/main.go +++ b/event_database/cloud_functions/cmd/main.go @@ -4,22 +4,32 @@ import ( "context" "log" "os" + "sync" "github.com/GoogleCloudPlatform/functions-framework-go/funcframework" p "github.com/certusone/wormhole/event_database/cloud_functions" ) func main() { - ctx := context.Background() - if err := funcframework.RegisterHTTPFunctionContext(ctx, "/", p.Entry); err != nil { - log.Fatalf("funcframework.RegisterHTTPFunctionContext: %v\n", err) - } - // Use PORT environment variable, or default to 8080. - port := "8080" - if envPort := os.Getenv("PORT"); envPort != "" { - port = envPort - } - if err := funcframework.Start(port); err != nil { - log.Fatalf("funcframework.Start: %v\n", err) - } + var wg sync.WaitGroup + + // http functions + wg.Add(1) + go func() { + defer wg.Done() + ctx := context.Background() + if err := funcframework.RegisterHTTPFunctionContext(ctx, "/", p.Entry); err != nil { + log.Fatalf("funcframework.RegisterHTTPFunctionContext: %v\n", err) + } + // Use PORT environment variable, or default to 8080. + port := "8080" + if envPort := os.Getenv("PORT"); envPort != "" { + port = envPort + } + if err := funcframework.Start(port); err != nil { + log.Fatalf("funcframework.Start: %v\n", err) + } + }() + + wg.Wait() }