Creating CNAME for Google Cloud Functions
![Creating CNAME for Google Cloud Functions](https://cloudanix-website-objects.nyc3.cdn.digitaloceanspaces.com/cname-for-google-cloud-functions/CNAME-for-Google.jpg)
In this blog, we will create a CNAME for our cloud functions with path matches. The problem with cloud functions is that they use long URLs. We will be using the load balancer method to create a CNAME. We will create three path matches for three separate cloud functions.
- Firstly we have to create a domain name in any domain registrar of your choice like Cloudflare. For example
mysamplefunctions.com
- To use this method we need a
project owner
orproject editor
role or the following permissions
Network Admin: Create load balancer and networking components
Compute Instance Admin: Create and modify NEGs
Security Admin: Create and modify SSL certificates
- We need to set up a global IP address to reach the load balancer
Run the following command
gcloud compute addresses create function-ip
--network-tier=PREMIUM
--ip-version=IPV4
--global
gcloud compute addresses describe function-ip
--format="get(address)"
--global
Console
![Reserving a static address](https://cloudanix-website-objects.nyc3.cdn.digitaloceanspaces.com/cname-for-google-cloud-functions/cname-functions.png)
- Create a serverless NEG (network endpoint group) for your first function let’s say. Image processor. The
--cloud-function-name
should be the name that you see for the function in the cloud console.
gcloud compute network-endpoint-groups create imageprocessorneg
--region=us-central1
--network-endpoint-type=serverless
--cloud-function-name=imageprocessor
Console
![Creating a network endpoint group](https://cloudanix-website-objects.nyc3.cdn.digitaloceanspaces.com/cname-for-google-cloud-functions/cname-function-1.png)
Add the FQDN and keep the other fields as is
![filling details of the network endpoint group](https://cloudanix-website-objects.nyc3.cdn.digitaloceanspaces.com/cname-for-google-cloud-functions/fdqn-cname-funtion.png)
- Create a backend service for the same.
gcloud compute backend-services create imageprocessorservice
--load-balancing-scheme=EXTERNAL
--global
You cannot create a global backend service from the console. To create a regional backend service
![new regional backend service](https://cloudanix-website-objects.nyc3.cdn.digitaloceanspaces.com/cname-for-google-cloud-functions/configure-backend.png)
Specify the network endpoint group name created in the previous step in the below drop-down menu.
![adding the network endpoint group](https://cloudanix-website-objects.nyc3.cdn.digitaloceanspaces.com/cname-for-google-cloud-functions/new-backend.png)
- Add the serverless NEG as a backend-to-backend service
gcloud compute backend-services add-backend imageprocessorservice
--global
--network-endpoint-group=imageprocessorneg
--network-endpoint-group-region=us-central1
- Create a NEG for your second Cloudrun service let’s say video processor. The
--cloud-function-name
should be the name that you see for the function in the cloud console
gcloud compute network-endpoint-groups create videoprocessorneg
--region=us-central1
--network-endpoint-type=serverless
--cloud-function-name=videoprocessor
- Create backend service for same.
gcloud compute backend-services create videoprocessorservice
--load-balancing-scheme=EXTERNAL
--global
- Add serverless NEG as backend to backend service.
gcloud compute backend-services add-backend videoprocessorservice
--global
--network-endpoint-group=videoprocessorneg
--network-endpoint-group-region=us-central1
- Create a NEG for your third Cloudrun service let’s say audio processor. The
--cloud-function-name
should be the name that you see for the function in the cloud console
gcloud compute network-endpoint-groups create audioprocessorneg
--region=us-central1
--network-endpoint-type=serverless
--cloud-function-name=audioprocessor
- Create backend service for same.
gcloud compute backend-services create audioprocessorservice
--load-balancing-scheme=EXTERNAL
--global
- Add serverless NEG as a backend to backend service.
gcloud compute backend-services add-backend audioprocessorservice
--global
--network-endpoint-group=audioprocessorneg
--network-endpoint-group-region=us-central1
- Create a URL map to route incoming requests to the backend service.
gcloud compute url-maps create myurlmap
--default-service imageprocessorservice
--default-service imageprocessorservice
The --default-service
will be used if no path is specified in the url.
- Create path matchers for all the services.
gcloud compute url-maps add-path-matcher myurlmap
--path-matcher-name=service-matcher
--new-hosts=mysamplefunctions.com
--default-service=imageprocessorservice
--backend-service-path-rules='/image=imageprocessorservice,/video=videoprocessorservice,/audio=audioprocessorservice'
- Create a target HTTP(S) proxy to route requests to your URL map.
gcloud compute target-http-proxies create myhttpproxy \
--url-map=myurlmap
Console steps 13, 14, and 15:
a. Create a http load balancer
![create a http load balancer](https://cloudanix-website-objects.nyc3.cdn.digitaloceanspaces.com/cname-for-google-cloud-functions/create-http-load-balancer.png)
b. Select the backend services created in the previous step
![select backend service created](https://cloudanix-website-objects.nyc3.cdn.digitaloceanspaces.com/cname-for-google-cloud-functions/created-backend-service.png)
c. Add the host and path rules. Add the respective backend services in the last column.
![adding host and path rules](https://cloudanix-website-objects.nyc3.cdn.digitaloceanspaces.com/cname-for-google-cloud-functions/host-path-rules.png)
d. Click Create
- Create a global forwarding rule to route incoming requests to the proxy.
gcloud compute forwarding-rules create myhttpforwadingrule \
--load-balancing-scheme=EXTERNAL \
--network-tier=PREMIUM \
--address=function-ip \
--target-http-proxy=myhttpproxy \
--global \
--ports=80
- After the load balancer is created, note the IP address that is associated with the load balancer: for example, 30.90.80.100. To point your domain to your load balancer, create an A record using your domain registration service.
- Make sure that proxy is disabled in the domain registrar like Cloudflare so the traffic is routed to the load balancer.
- So you can now access the functions in the following manner.
– For image processormysamplefucntions.com/image
– For video processor.mysamplefucntions.com/video
– For Audio processor.myaudioprocessor.com/audio
- The document for reference are
- https://cloud.google.com/load-balancing/docs/https/setting-up-https-serverless#gcloud:-cloud-functions
- https://cloud.google.com/load-balancing/docs/url-map-concepts
- https://cloud.google.com/load-balancing/docs/negs/serverless-neg-concepts