Connect to a Redis instance from Cloud Run functions

You can connect to a Redis instance from Cloud Run functions by using Direct VPC egress.

Setup

If you have already installed the Google Cloud CLI and have created a Redis instance, you can skip these steps.

  1. Install the gcloud CLI and initialize:

    gcloud init
    
  2. Follow the Quickstart Guide to create a Redis instance. Take note of the zone, IP address, and port of the Redis instance.

Prepare VPC network egress for configuration

To connect to your Redis instance, your Cloud Run function must have access to the Redis instance's authorized VPC network.

To find the name of this network, run the following command:

 gcloud redis instances describe INSTANCE_ID --region REGION --format "value(authorizedNetwork)"

Make a note of the network name.

Sample function

This sample function establishes a connection to a Redis instance from Cloud Run functions.

Clone the repository for your desired programming language and navigate to the folder that contains the sample code:

Go

gitclonehttps://github.com/GoogleCloudPlatform/golang-samples
cdgolang-samples/functions/memorystore/redis

Node.js

gitclonehttps://github.com/GoogleCloudPlatform/nodejs-docs-samples
cdnodejs-docs-samples/functions/memorystore/redis

Python

git clone https://github.com/GoogleCloudPlatform/python-docs-samples
cd python-docs-samples/functions/memorystore/redis

The sample code increments a Redis counter every time the function is triggered:

Go

This function uses the github.com/gomodule/redigo/redis client.


// Package visitcount provides a Cloud Function that connects
// to a managed Redis instance.
packagevisitcount
import(
"errors"
"fmt"
"log"
"net/http"
"os"
"github.com/GoogleCloudPlatform/functions-framework-go/functions"
"github.com/gomodule/redigo/redis"
)
varredisPool*redis.Pool
funcinit(){
// Register the HTTP handler with the Functions Framework
functions.HTTP("VisitCount",visitCount)
}
// initializeRedis initializes and returns a connection pool
funcinitializeRedis()(*redis.Pool,error){
redisHost:=os.Getenv("REDISHOST")
ifredisHost==""{
returnnil,errors.New("REDISHOST must be set")
}
redisPort:=os.Getenv("REDISPORT")
ifredisPort==""{
returnnil,errors.New("REDISPORT must be set")
}
redisAddr:=fmt.Sprintf("%s:%s",redisHost,redisPort)
constmaxConnections=10
return&redis.Pool{
MaxIdle:maxConnections,
Dial:func()(redis.Conn,error){
c,err:=redis.Dial("tcp",redisAddr)
iferr!=nil{
returnnil,fmt.Errorf("redis.Dial: %w",err)
}
returnc,err
},
},nil
}
// visitCount increments the visit count on the Redis instance
// and prints the current count in the HTTP response.
funcvisitCount(whttp.ResponseWriter,r*http.Request){
// Initialize connection pool on first invocation
ifredisPool==nil{
// Pre-declare err to avoid shadowing redisPool
varerrerror
redisPool,err=initializeRedis()
iferr!=nil{
log.Printf("initializeRedis: %v",err)
http.Error(w,"Error initializing connection pool",http.StatusInternalServerError)
return
}
}
conn:=redisPool.Get()
deferconn.Close()
counter,err:=redis.Int(conn.Do("INCR","visits"))
iferr!=nil{
log.Printf("redis.Int: %v",err)
http.Error(w,"Error incrementing visit count",http.StatusInternalServerError)
return
}
fmt.Fprintf(w,"Visit count: %d",counter)
}

Node.js

This function uses the redis module.


constfunctions=require('@google-cloud/functions-framework');
constredis=require('redis');
constREDISHOST=process.env.REDISHOST||'localhost';
constREDISPORT=process.env.REDISPORT||6379;
constredisClient=redis.createClient({
socket:{
host:REDISHOST,
port:REDISPORT,
},
});
redisClient.on('error',err=>console.error('ERR:REDIS:',err));
redisClient.connect();
functions.http('visitCount',async(req,res)=>{
try{
constresponse=awaitredisClient.incr('visits');
res.writeHead(200,{'Content-Type':'text/plain'});
res.end(`Visit count: ${response}`);
}catch(err){
console.log(err);
res.status(500).send(err.message);
}
});

Python

This function uses the redis-py package.


importos
importfunctions_framework
importredis
redis_host = os.environ.get("REDISHOST", "localhost")
redis_port = int(os.environ.get("REDISPORT", 6379))
redis_client = redis.StrictRedis(host=redis_host, port=redis_port)
@functions_framework.http
defvisit_count(request):
 value = redis_client.incr("visits", 1)
 return f"Visit count: {value}"

Deploying the sample to Cloud Run functions

To deploy the function:

  1. Copy the Dockerfile into the source directory:

    cp cloud_run_deployment/Dockerfile .
    
  2. Build a container image using Cloud Build by running the following command:

    gcloud builds submit --tag gcr.io/PROJECT_ID/visit-count
    
  3. Deploy the container to Cloud Run by running the following command:

     gcloud run deploy \
     --image gcr.io/PROJECT_ID/visit-count \
     --allow-unauthenticated \
     --region REGION \
     --network NETWORK \
     --subnet SUBNET \
     --set-env-vars REDISHOST=REDIS_IP,REDISPORT=REDIS_PORT
    

    where:

    • PROJECT_ID is your Google Cloud project's ID.
    • REGION is the region where your Redis instance is located.
    • NETWORK is the name of the authorized VPC network that your Redis instance is attached to.
    • SUBNET is the name of your subnet. The subnet must be /26 or larger. Direct VPC egress supports RFC 1918, RFC 6598, and Class E IPv4 ranges.
    • REDIS_IP and REDIS_PORT are the IP address and port number of your Redis instance.

After the function deployment finishes, retrieve your function's URL:

gcloudrunservicesdescribevisit-count\
--region=REGION

You can see the counter increase every time you trigger the function by sending a GET request to its URL.

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025年10月30日 UTC.