전송 중 암호화 클라이언트 라이브러리 코드 샘플

이 코드 샘플은 전송 중인 데이터 암호화가 사용 설정된 Redis용 Memorystore 인스턴스에 연결하기 위한 go-redis 클라이언트 라이브러리 구성을 보여줍니다.

인스턴스에 연결

다음 샘플은 클라이언트를 인스턴스화하고, 전송 중 암호화를 위한 인증 기관을 로드하고, 연결 풀을 설정하는 방법의 예시를 보여줍니다.

Go

import (
	"context"
	"crypto/tls"
	"crypto/x509"
	"errors"
	"fmt"
	"io"
	"time"

	memorystore "cloud.google.com/go/redis/apiv1"
	redispb "cloud.google.com/go/redis/apiv1/redispb"
	"github.com/go-redis/redis/v8"
)

// ConnectToDatabase demonstrates how to use go-redis library to connect to a
// Memorystore Redis instance.
func ConnectToDatabase(w io.Writer, projectID, location, instanceID string) error {

	// Instantiate a Redis administrative client
	ctx := context.Background()
	adminClient, err := memorystore.NewCloudRedisClient(ctx)
	if err != nil {
		return err
	}
	defer adminClient.Close()

	req := &redispb.GetInstanceRequest{
		Name: fmt.Sprintf("projects/%s/locations/%s/instances/%s", projectID, location, instanceID),
	}

	instance, err := adminClient.GetInstance(ctx, req)
	if err != nil {
		return err
	}

	fmt.Fprintln(w, instance)

	// Load CA cert
	caCerts := instance.GetServerCaCerts()
	if len(caCerts) == 0 {
		return errors.New("memorystore: no server CA certs for instance")
	}

	caCertPool := x509.NewCertPool()
	caCertPool.AppendCertsFromPEM([]byte(caCerts[0].Cert))

	// Setup Redis Connection pool
	client := redis.NewClient(&redis.Options{
		Addr:         fmt.Sprintf("%s:%d", instance.Host, instance.Port),
		Password:     "PASSWORD",
		PoolSize:     1,
		MinIdleConns: 1,
		PoolTimeout:  0,
		IdleTimeout:  20 * time.Second,
		DialTimeout:  2 * time.Second,
		TLSConfig: &tls.Config{
			RootCAs: caCertPool,
		},
	})

	p, err := client.Ping(ctx).Result()
	if err != nil {
		return err
	}
	fmt.Fprintf(w, "Response:\n%s", p)

	return nil
}

다음 단계