Condividi tramite


Guida introduttiva: Creare un'app Python con Azure Managed Redis

Questo articolo illustra come usare una cache Redis gestita di Azure con il linguaggio Python e connettersi usando Microsoft Entra ID.

Prerequisiti

  • Sottoscrizione di Azure: crearne una gratuitamente
  • Installare l'ambiente del linguaggio Python 3.7+
  • Aggiungi queste importazioni al progetto e all'ambiente di sviluppo
    • redis - Client Python di Redis
    • redis-entraid - Estensione di autenticazione Redis di Microsoft Entra ID
    • azure-identity - Libreria di autenticazione di Azure

Creare un'istanza di Redis gestita di Azure

Creare prima di tutto una cache. È possibile creare una cache usando Azure Managed Redis o Cache Redis di Azure usando il portale di Azure. In questo Quickstart si usa Azure Managed Redis.

Quando si crea la cache, Microsoft Entra ID è abilitato per impostazione predefinita, rendendolo sicuro dall'avvio. La cache deve anche usare un endpoint pubblico per questo avvio rapido.

Per creare una cache con il portale, seguire una delle procedure seguenti:

Facoltativamente, è possibile creare una cache usando l'interfaccia della riga di comando di Azure, PowerShell, a qualsiasi scelta.

Codice per la connessione a una cache Redis

Nella prima parte dell'esempio di codice impostare la connessione alla cache.

  • Porte per cache gestite da Azure e Enterprise Redis: 10000
  • Porte per le istanze di Azure Cache per Redis: 6380
import redis
from azure.identity import DefaultAzureCredential
from redis_entraid.cred_provider import create_from_default_azure_credential

# Connection details for your cache
# Get the connection details for the Redis instance
redis_host = "contosob116.westus3.redis.azure.net"
redis_port = 10000  #For an Azure 

print("🚀 Starting Azure Redis Cache connection test...")
print(f"📡 Connecting to: {redis_host}:{redis_port}")

# Validate configuration
if not redis_host or not redis_port:
    print("❌ Error: Redis host and port must be configured")
    exit(1)

print()  # Add a new line

try:
    # Create credential provider using DefaultAzureCredential for Azure Entra ID authentication
    credential_provider = create_from_default_azure_credential(
         ("https://redis.azure.com/.default",),)

    # Create a Redis client with Azure Entra ID authentication
    r = redis.Redis(host=redis_host, 
                    port=redis_port, 
                    ssl=True, 
                    decode_responses=True, 
                    credential_provider=credential_provider,
                    socket_timeout=10,
                    socket_connect_timeout=10
                    )

Codice per testare una connessione

Nella sezione successiva testare la connessione usando il comando ping Redis che restituisce il True valore.

# Ping the Redis server to test the connection
result = r.ping()
if result:
    print("Ping returned: ", result)

Impostare un codice, ottenere una chiave

In questa sezione, usa una sequenza di base set e get per iniziare a usare la cache Redis nel modo più semplice.

    # Create a simple set and get operation
    result = r.set("Message", "Hello, The cache is working with Python!")
    print("✅ SET Message succeeded: " + str(result))
    print()  # Add a new line

    value = r.get("Message")

    if value is not None:
        print("✅ GET Message returned : " + str(value))
        print()  # Add a new line
    else:
        print("⚠️  GET Message returned None")
        print()  # Add a new line
    
    print("🎉 All Redis operations completed successfully!")
    print()  # Add a new line

Prima di poter eseguire questo codice, è necessario aggiungersi come utente Redis alla cache.

È anche necessario autorizzare la connessione ad Azure dalla riga di comando usando la riga di comando di Azure o la riga di comando per sviluppatori di Azure (azd).

È anche necessario aggiungere utenti o un'entità di sistema alla cache. Aggiungere chiunque possa eseguire il programma come utente nella cache Redis.

Il risultato è simile al seguente:

C:\utils\python-quickstart>python quickstart-amr.py
🚀 Starting Azure Redis Cache connection test...
📡 Connecting to: contosob116.westus3.redis.azure.net:10000

✅ Ping returned : True

✅ SET Message succeeded: True

✅ GET Message returned : Hello, The cache is working with Python!

🎉 All Redis operations completed successfully!

🔐 Redis connection closed

Qui è possibile vedere l'intero esempio di codice. Il codice contiene alcuni controlli degli errori omessi dalle spiegazioni del codice precedenti per semplicità. Il passaggio finale è chiudere la connessione alla cache.

# Python Quickstart using Azure Entra ID authentication
# Azure Managed Redis cache that you created using the Azure portal, or CLI
# This script demonstrates secure connection using Microsoft Entra ID authentication
# This script demonstrates secure connection using the default Azure credential provider
# You should be a user on the cache and logged in to Azure CLI with the same account using `az login`

import redis
from azure.identity import DefaultAzureCredential
from redis_entraid.cred_provider import create_from_default_azure_credential

# Connection details for your cache
# Get the connection details for the Redis instance
redis_host = "<host-url>"  # Replace with your cache info
redis_port = <port number>  # Replace with your cache info 

print("🚀 Starting Azure Redis Cache connection test...")
print(f"📡 Connecting to: {redis_host}:{redis_port}")

# Validate configuration
if not redis_host or not redis_port:
    print("❌ Error: Redis host and port must be configured")
    exit(1)

print()  # Add a new line

try:
    # Create credential provider using DefaultAzureCredential for Azure Entra ID authentication
    credential_provider = create_from_default_azure_credential(
         ("https://redis.azure.com/.default",),)

    # Create a Redis client with Azure Entra ID authentication
    r = redis.Redis(host=redis_host, 
                    port=redis_port, 
                    ssl=True, 
                    decode_responses=True, 
                    credential_provider=credential_provider,
                    socket_timeout=10,
                    socket_connect_timeout=10
                    )

    # Test connection 
    result = r.ping()
    print("✅ Ping returned : " + str(result))
    print()  # Add a new line

    # Create a simple set and get operation
    result = r.set("Message", "Hello, The cache is working with Python!")
    print("✅ SET Message succeeded: " + str(result))
    print()  # Add a new line

    value = r.get("Message")

    if value is not None:
        print("✅ GET Message returned : " + str(value))
        print()  # Add a new line
    else:
        print("⚠️  GET Message returned None")
        print()  # Add a new line
    
    print("🎉 All Redis operations completed successfully!")
    print()  # Add a new line

except redis.ConnectionError as e:
    print(f"❌ Connection error: {e}")
    print("💡 Check if Redis host and port are correct, and ensure network connectivity")
    print()  # Add a new line
except redis.AuthenticationError as e:
    print(f"❌ Authentication error: {e}")
    print("💡 Check if Azure Entra ID authentication is properly configured")
    print()  # Add a new line
except redis.TimeoutError as e:
    print(f"❌ Timeout error: {e}")
    print("💡 Check network latency and Redis server performance")
    print()  # Add a new line
except Exception as e:
    print(f"❌ Unexpected error: {e}")
    if "999" in str(e):
        print("💡 Error 999 typically indicates a network connectivity issue or firewall restriction")
        print("   - Verify the Redis hostname is correct")
        print("   - Verify that you have logged in with Az CLI")
        print("   - Ensure the Redis cache is running and accessible")
    print()  # Add a new line
finally:
    # Clean up connection if it exists
    if 'r' in locals():
        try:
            r.close()
            print("🔐 Redis connection closed")
        except Exception as e:
            print(f"❌ Error closing connection: {e}")

Pulire le risorse

Per continuare a usare le risorse create in questo articolo, mantenere il gruppo di risorse.

In caso contrario, se le risorse sono state completate, per evitare addebiti è possibile eliminare il gruppo di risorse di Azure creato.

Importante

L'eliminazione di un gruppo di risorse è irreversibile. Quando si elimina un gruppo di risorse, tutte le risorse in esso contenute vengono eliminate in modo permanente. Assicurarsi di non eliminare accidentalmente il gruppo di risorse sbagliato o le risorse errate. Se le risorse sono state create all'interno di un gruppo di risorse esistente che contiene anche elementi da mantenere, è possibile eliminare ogni singolo elemento a sinistra anziché eliminare il gruppo di risorse.

Per eliminare un gruppo di risorse

  1. Accedere al portale di Azure e selezionare Gruppi di risorse.

  2. Scegliere il gruppo di risorse da eliminare.

    Se sono presenti molti gruppi di risorse, usare la casella Filtro per qualsiasi campo... e digitare il nome del gruppo di risorse creato per questo articolo. Nell’elenco dei risultati selezionare il gruppo di risorse.

    Screenshot che mostra nel riquadro di lavoro un elenco dei gruppi di risorse da eliminare.

  3. Selezionare Elimina gruppo di risorse.

  4. Verrà chiesto di confermare l'eliminazione del gruppo di risorse. Digitare il nome del gruppo di risorse per confermare e quindi selezionare Elimina.

    Screenshot che mostra un modulo richiedente il nome della risorsa per confermare l'eliminazione.

Dopo qualche istante, il gruppo di risorse e tutte le risorse che contiene vengono eliminati.