Docker Build and Push to GCR and Deploy to Google Cloud Run using separate projects
This example lives in the pulumi/examples repository. Check out just this directory to use it:
git clone --filter=blob:none --sparse https://github.com/pulumi/examples pulumi-examplesgit -C pulumi-examples sparse-checkout set gcp-ts-docker-gcr-cloudruncd pulumi-examples/gcp-ts-docker-gcr-cloudrunAn example of building a custom Docker image and pushing it into a Google Cloud Container Registry and then in a separate project deploying that image with the Google Cloud Run service using TypeScript.
Note this is an adaptation of the gcp-ts-cloudrun example
Prerequisites#
- Ensure you have the latest Node.js and NPM
- Install the Pulumi CLI
- Configure Pulumi to access your GCP account
- Install Docker
- Enable Docker to deploy to Google Container Registry with
gcloud auth configure-docker - Setup Docker auth with a JSON key to get image from GCR
Build and Push Docker Image#
-
Navigate to the
docker-build-push-gcrdirectory -
Restore NPM dependencies:
$ npm install -
Create a new stack:
$ pulumi stack init dev -
Configure your GCP project and region:
$ pulumi config set gcp:project <projectname>$ pulumi config set gcp:region <region> -
Run
pulumi upto preview and deploy changes:$ pulumi upPreviewing update (dev):...Updating (dev):Type Name Status+ pulumi:pulumi:Stack gcr-build-image-dev created+ └─ docker:image:Image ruby-app createdOutputs:digest: "gcr.io/velvety-rock-274215/ruby-app:latest-fee86d3d35fccf2ad4d86bbfcdd489acf7b1e4db0ebb8166378bd1fb0ca9cee6"Resources:+ 2 createdDuration: 16s
Deploy Cloud Run#
-
Navigate to the
cloud-run-deploydirectory -
Restore NPM dependencies:
$ npm install -
Create a new stack:
$ pulumi stack init dev -
Configure your GCP project, region and docker config file:
$ pulumi config set gcp:project <projectname>$ pulumi config set gcp:region <region>$ pulumi config set docker-config-file <location of ~/.docker/config.json> -
Run
pulumi upto preview and deploy changes:$ pulumi upPreviewing update (dev):Type Name Plan+ pulumi:pulumi:Stack cloud-run-deploy-dev create+ ├─ pulumi:providers:docker gcr create+ ├─ docker:index:RemoteImage ruby-app-docker-image create+ ├─ gcp:cloudrun:Service ruby create+ └─ gcp:cloudrun:IamMember ruby-everyone createResources:+ 5 to createDo you want to perform this update? yesUpdating (dev):Type Name Status+ pulumi:pulumi:Stack cloud-run-deploy-dev created+ ├─ pulumi:providers:docker gcr created+ ├─ docker:index:RemoteImage ruby-app-docker-image created+ ├─ gcp:cloudrun:Service ruby created+ └─ gcp:cloudrun:IamMember ruby-everyone createdOutputs:rubyUrl: "https://ruby-app-7a54c5f5e006d5cf33c2-zgms4nzdba-uc.a.run.app"Resources:+ 5 createdDuration: 23s -
Check the deployed Cloud Run endpoint:
$ curl "$(pulumi stack output rubyUrl)"Hello Pulumi! -
Clean up your GCP and Pulumi resources (run in both projects):
$ pulumi destroy...$ pulumi stack rm dev...