I’m wanting to setup a Google Cloud memorystore redis instance and connect to it through my google cloud functions. After following this guide https://thecloudfunction.com/blog/firebase-cloud-functions-and-redis/
The general steps as I understand are:
- Enable Serverless VPC Service and create a connector for my function to use.
- Enable redis and create a redis instance on the same IP address range.
The problem is if I create the connector first (step #1) then I get this error when trying to create a redis instance (step #2):
Server response: Invalid value for field 'resource.ipCidrRange': '10.92.0.0/28'. Invalid IPCidrRange: 10.92.0.0/28 conflicts with peer network in active peering 'redis-peer-863826821838'.
And if I try and flip the steps, create the redis instance first (step #2) and then create the connector (step #1) then I get this error when trying to create the connector:
connector is in a bad state manual deletion recommended
I assume this is a problem with some IP range conflict per the first error but looking at the VPC connections I don’t see a conflict anywhere:
As far as I understand none of these should conflict with my IP range of 10.92.0.0/28
, right?
All of this is happening on us-central1
Wondering if anyone knows how to correctly setup a redis instance + connector and move past these errors or if anyone has any suggestions on where to look for this IP range conflict and how to solve for it.
Thanks!
2
Answers
Okay so finally got this to work. For anyone else struggling with this issue here is what I had to do:
Instance IP address range
. Skip the field and create it without one. This is will generate a redis instance that doesn't conflict with any other ranged. For example10.51.123.233
10.51.123.233
then you need to set the connect IP range to10.51.0.0/28
IP Address will be ‘occupied’ by the service
I was learning GCP functions & redis using the official guide. In summary…
Is good to learn a bit about CIDR. I found this online tool helpful.
Redis and connector addresses must not overlap. Like OP, I thought I was connecting the redis IP to the function but this is wrong. The IP address inside your VPC will be ‘occupied’ by the connector. Same for redis.
I successfully created a connector instance by designating a custom subnet (created in advance with CIDR 10.1.0.0/28)
However, creating a subnet for the redis instance did not work. Instead, a ‘redis-peer-…’ VPC network peer was created and caused the ip conflict message in OP above.
Designating a fresh IP range worked.
Finally, deploying the function again worked.