この記事では、Go 言語で Azure Redis Cache を使用し、Microsoft Entra ID を使用して接続する方法について説明します。
[前提条件]
- Azure サブスクリプション - 無料アカウントを作成する
- Go 言語環境をインストールする
- Redis からプロジェクトと開発環境に 2 つのインポート を追加する
entraid "github.com/redis/go-redis-entraid""github.com/redis/go-redis/v9"
Azure Managed Redis インスタンスを作成する
まず、キャッシュを作成します。 Azure Portal を使用して、Azure Managed Redis または Azure Cache for Redis を使用してキャッシュを作成できます。 このクイック スタートでは、Azure Managed Redis を使用します。
キャッシュを作成すると、Microsoft Entra ID が既定で有効になり、最初からセキュリティで保護されます。 キャッシュでは、このクイック スタート用のパブリック エンドポイントも使用する必要があります。
ポータルでキャッシュを作成するには、次のいずれかの手順に従います。
必要に応じて、Azure CLI の PowerShell を使用して任意のキャッシュを作成できます。
Redis Cache に接続するコード
コード サンプルの最初の部分で、キャッシュへの接続を設定します。
package main
import (
"context"
"crypto/tls"
"fmt"
"log"
"time"
entraid "github.com/redis/go-redis-entraid"
"github.com/redis/go-redis/v9"
)
func main() {
ctx := context.Background()
// Set your Redis endpoint (hostname:port) from the cache you created.
redisHost := "<host >:<public port number>"
// Create a credentials provider using DefaultAzureCredential
provider, err := entraid.NewDefaultAzureCredentialsProvider(entraid.DefaultAzureCredentialsProviderOptions{})
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// Create Redis client with Entra ID authentication
client := redis.NewClient(&redis.Options{
Addr: redisHost,
TLSConfig: &tls.Config{MinVersion: tls.VersionTLS12},
WriteTimeout: 5 * time.Second,
StreamingCredentialsProvider: provider,
})
defer client.Close()
接続をテストするコード
次のセクションでは、ping文字列を返す Redis コマンド pongを使用して接続をテストします。
// Ping the Redis server to test the connection
pong, err := client.Ping(ctx).Result()
if err != nil {
log.Fatal("Failed to connect to Redis:", err)
}
fmt.Println("Ping returned: ", pong)
コードでキーを設定し、キーを取得する
このセクションでは、基本的な set と get シーケンスを使用して、最も簡単な方法で Redis キャッシュの使用を開始します。
// Do something with Redis and a key-value pair
result, err := client.Set(ctx, "Message", "Hello, The cache is working with Go!", 0).Result()
if err != nil {
log.Fatal("SET Message failed:", err)
}
fmt.Println("SET Message succeeded:", result)
value, err := client.Get(ctx, "Message").Result()
if err != nil {
if err == redis.Nil {
fmt.Println("GET Message returned: key does not exist")
} else {
log.Fatal("GET Message failed:", err)
}
} else {
fmt.Println("GET Message returned:", value)
}
}
このコードを実行する前に、自分を Redis ユーザーとして追加する必要があります。
また、Azure コマンド ラインまたは Azure 開発者コマンド ライン (azd) を使用して、コマンド ラインから Azure への接続を承認する必要があります。
また、 キャッシュにユーザーまたはシステム プリンシパルを追加する必要があります。 プログラムを実行する可能性のあるすべてのユーザーを Redis Cache でユーザーとして追加します。
結果は次のようになります。
Ping returned: PONG
SET Message succeeded: OK
GET Message returned: Hello, The cache is working with Go!
ここでは、このコード サンプル全体を確認できます。
package main
import (
"context"
"crypto/tls"
"fmt"
"log"
"time"
entraid "github.com/redis/go-redis-entraid"
"github.com/redis/go-redis/v9"
)
func main() {
ctx := context.Background()
// Set your Redis host (hostname:port)
redisHost := "<host >:<public port number>"
// Create a credentials provider using DefaultAzureCredential
provider, err := entraid.NewDefaultAzureCredentialsProvider(entraid.DefaultAzureCredentialsProviderOptions{})
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// Create Redis client with Entra ID authentication
client := redis.NewClient(&redis.Options{
Addr: redisHost,
TLSConfig: &tls.Config{MinVersion: tls.VersionTLS12},
WriteTimeout: 5 * time.Second,
StreamingCredentialsProvider: provider,
})
defer client.Close()
// Ping the Redis server to test the connection
pong, err := client.Ping(ctx).Result()
if err != nil {
log.Fatal("Failed to connect to Redis:", err)
}
fmt.Println("Ping returned: ", pong)
// Do something with Redis and a key-value pair
result, err := client.Set(ctx, "Message", "Hello, The cache is working with Go!", 0).Result()
if err != nil {
log.Fatal("SET Message failed:", err)
}
fmt.Println("SET Message succeeded:", result)
value, err := client.Get(ctx, "Message").Result()
if err != nil {
if err == redis.Nil {
fmt.Println("GET Message returned: key does not exist")
} else {
log.Fatal("GET Message failed:", err)
}
} else {
fmt.Println("GET Message returned:", value)
}
}
リソースをクリーンアップする
この記事で作成したリソースを引き続き使用する場合は、リソース グループを保持します。
それ以外の場合、リソースを使い終わったら、課金されないように、作成した Azure リソース グループを削除できます。
重要
リソース グループを削除すると、元に戻すことができません。 リソース グループを削除すると、そのリソース グループ内のすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 リソースを既存のリソース グループ内に作成し、そのリソース グループ内に保持したいリソースが含まれている場合は、リソース グループを削除するのではなく、各リソースを個別に削除できます。
リソース グループを削除するには
Azure portal にサインインし、 [リソース グループ] を選択します。
削除するリソース グループを選択します。
多数のリソース グループがある場合は、[任意のフィールドのフィルター...] ボックスを使用し、この記事用に作成したリソース グループの名前を入力します。 結果リストでリソース グループを選びます。
[リソース グループの削除] を選択します。
リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、[削除] を選択します。
しばらくすると、リソース グループとそのリソースのすべてが削除されます。