Optimizing custom Apollo Router builds
Enhance performance, minimize build time, and address system requirements
While running the Apollo Router in production has great performance, this comes at the cost of increased build time and higher system requirements when compiling from source.
Building the router including custom plugins from source is a memory-expensive process, and as such it's not suited for all build environments.
Some cloud build pipelines such as Google Cloud Build, will require changes to the default build configuration to increase the memory and CPU capacity of the build worker pool.
The router will also download a large collection of dependencies during the build process each build by default. We can use
In this example for Google Cloud Build, we have replaced the standard docker
We also changed the default options.machineType
value to E2_HIGHCPU_8
, this is because the default worker pool doesn't have the CPU or memory resources necessary to compile the router.
#cloudbuild.yamlsteps:- id: Build Routername: "gcr.io/kaniko-project/executor:latest"args:- "--cache=true"- "--dockerfile=$_DOCKERFILE"- "--context=dir://$_IMAGE_NAME"- >---destination=$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_IMAGE_NAME:$COMMIT_SHA- id: Deploy Routername: "gcr.io/google.com/cloudsdktool/cloud-sdk:slim"entrypoint: gcloudargs:- run- services- update- $_SERVICE_NAME- "--platform=managed"- "--image=$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_IMAGE_NAME:$COMMIT_SHA"- "--region=$_DEPLOY_REGION"- "--quiet"options:machineType: E2_HIGHCPU_8substitutions:_DOCKERFILE: custom-router/Dockerfile_IMAGE_NAME: custom-router_SERVICE_NAME: apollo-router_DEPLOY_REGION: northamerica-northeast1_GCR_HOSTNAME: northamerica-northeast1-docker.pkg.dev_PLATFORM: managed