Del 6: Startkod för huvudapp

Föregående del: Beroenden och miljövariabler

Omedelbart efter instruktionerna import initierar appens startkod nyckelvariabler som används i funktionerna för hantering av begäranden.

Först skapar programmet Flask-appobjektet, som fungerar som grund för att definiera vägar och hantera inkommande HTTP-begäranden. Därefter hämtar den API-slutpunkts-URL:en från tredje part från en miljövariabel. Den här metoden gör det enkelt att konfigurera slutpunkten utan att ändra kodbasen:

app = Flask(__name__)
app.config["DEBUG"] = True

number_url = os.environ["THIRD_PARTY_API_ENDPOINT"]

Därefter hämtas DefaultAzureCredential-objektet, vilket är den rekommenderade autentiseringsuppgiften att använda när du autentiserar dig mot Azure-tjänster. Se autentisera Azure-värdbaserade program med DefaultAzureCredential.

credential = DefaultAzureCredential()

När du kör lokalt letar DefaultAzureCredential efter miljövariablerna AZURE_TENANT_ID, AZURE_CLIENT_IDoch AZURE_CLIENT_SECRET som innehåller information för det tjänsthuvudkonto du använder för lokal utveckling. När DefaultAzureCredential körs i Azure använder den som standard den systemtilldelade hanterade identiteten som är aktiverad på appen. Du kan åsidosätta standardbeteendet med programinställningar, men i det här exempelscenariot används standardbeteendet.

Koden hämtar sedan tredjeparts-API:ets åtkomstnyckel från Azure Key Vault. I etableringsskriptet skapas Key Vault med hjälp av az keyvault create, och hemligheten lagras med hjälp av az keyvault secret set.

Själva Key Vault-resursen nås via en URL som läses in från miljövariabeln KEY_VAULT_URL.

key_vault_url = os.environ["KEY_VAULT_URL"]

För att hämta en hemlighet från Azure Key Vault måste programmet skapa ett klientobjekt som kommunicerar med Key Vault-tjänsten. Eftersom målet är att läsa en hemlighet använder SecretClient appen klassen från azure.keyvault.secrets biblioteket. Den här klienten kräver två indata:

  • Key Vault-URL:en – hämtas vanligtvis från en miljövariabel
  • Ett autentiseringsobjekt – till exempel den DefaultAzureCredential instans som skapades tidigare, som representerar den identitet som appen körs under.
keyvault_client = SecretClient(vault_url=key_vault_url, credential=credential)

Att skapa ett SecretClient objekt autentiserar inte programmet omedelbart. Klienten är helt enkelt en lokal konstruktion som lagrar Key Vault-URL:en och autentiseringsobjektet. Autentisering och auktorisering sker endast när du anropar en åtgärd via klienten, till exempel get_secret, som genererar ett REST API-anrop till Azure-resursen.

api_secret_name = os.environ["THIRD_PARTY_API_SECRET_NAME"]
vault_secret = keyvault_client.get_secret(api_secret_name)

# The "secret" from Key Vault is an object with multiple properties. The key we
# want for the third-party API is in the value property. 
access_key = vault_secret.value

Även om en programsidentitet har behörighet att få åtkomst till Azure Key Vault måste den också uttryckligen beviljas behörighet att utföra specifika åtgärder, till exempel att läsa hemligheter. Utan den här behörigheten misslyckas ett anrop till get_secret() , även om identiteten annars är giltig. För att hantera den här behörigheten anger etableringsskriptet åtkomstprincipen "hämta hemligheter" för appen med hjälp av kommandot Azure CLI, az keyvault set-policy. Mer information finns i Key Vault-autentisering och Bevilja din app åtkomst till Key Vault-. Den senare artikeln visar hur du anger en åtkomstprincip med hjälp av Azure-portalen. (Artikeln är också skriven för hanterad identitet, men gäller även för ett huvudnamn för tjänsten som används i lokal utveckling.)

Slutligen konfigurerar appkoden klientobjektet genom vilket det kan skriva meddelanden till en Azure Storage-kö. Köns URL finns i miljövariabeln: STORAGE_QUEUE_URL.

queue_url = os.environ["STORAGE_QUEUE_URL"]
queue_client = QueueClient.from_queue_url(queue_url=queue_url, credential=credential)

Precis som med Azure Key Vault använder programmet ett specifikt klientobjekt från Azure SDKs för att interagera med Azure Queue Storage. I det här fallet använder den QueueClient klassen från biblioteket azure-storage-queue.

För att initiera klienten använder appen metoden from_queue_url och tillhandahåller köns fullständigt kvalificerade URL och ett autentiseringsobjekt. Det här autentiseringsobjektet är återigen den DefaultAzureCredential instans som skapades tidigare, vilket representerar den identitet som appen körs under.

Som tidigare nämnts i den här guiden beviljas den auktoriseringen genom att tilldela rollen "Storage Queue Data Contributor" till programmets identitet – antingen en hanterad identitet i Azure eller ett huvudnamn för tjänsten under den lokala utvecklingen. Den här rolltilldelningen görs i etableringsskriptet med hjälp av kommandot az role assignment createAzure CLI .

Förutsatt att all startkod lyckas har appen alla sina interna variabler på plats för att stödja dess /api/v1/getcode API-slutpunkt.