Část 6: Hlavní spouštěcí kód aplikace

Předchozí část: Závislosti a proměnné prostředí

Hned po import příkazech inicializuje spouštěcí kód aplikace klíčové proměnné používané v rámci funkcí zpracování požadavků.

Nejprve aplikace vytvoří objekt aplikace Flask, který slouží jako základ pro definování tras a zpracování příchozích požadavků HTTP. Dále načte adresu URL koncového bodu rozhraní API třetí strany z proměnné prostředí. Tento přístup usnadňuje konfiguraci koncového bodu beze změny základu kódu:

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

number_url = os.environ["THIRD_PARTY_API_ENDPOINT"]

Dále získá DefaultAzureCredential objekt, což je doporučené přihlašovací údaje, které se mají použít při ověřování pomocí Azure služeb. Viz Ověřování hostovaných aplikací Azure pomocíDefaultAzureCredential .

credential = DefaultAzureCredential()

Při místním spuštění DefaultAzureCredential hledá proměnné prostředí AZURE_TENANT_ID, AZURE_CLIENT_IDa AZURE_CLIENT_SECRET, které obsahují informace o principálu služby, který používáte pro místní vývoj. Při spuštění v Azure DefaultAzureCredential ve výchozím nastavení používá spravovanou identitu přiřazenou systémem, která je povolena v aplikaci. Výchozí chování můžete přepsat nastavením aplikace, ale v tomto ukázkovém scénáři se použije výchozí chování.

Kód dále načte přístupový klíč rozhraní API třetí strany ze služby Azure Key Vault. Ve skriptu zřizování se Key Vault vytvoří pomocí az keyvault createa tajný klíč se uloží pomocí az keyvault secret set.

K prostředku služby Key Vault se přistupuje přímo prostřednictvím adresy URL, která je načtena z proměnné prostředí KEY_VAULT_URL.

key_vault_url = os.environ["KEY_VAULT_URL"]

Pokud chcete načíst tajný klíč ze služby Azure Key Vault, musí aplikace vytvořit objekt klienta, který komunikuje se službou Key Vault. Vzhledem k tomu, že cílem je číst tajný kód, aplikace používá SecretClient třídu z azure.keyvault.secrets knihovny. Tento klient vyžaduje dva vstupy:

  • Adresa URL služby Key Vault – obvykle načtená z proměnné prostředí
  • Objekt přihlašovacích údajů – například DefaultAzureCredential instance vytvořená dříve, která představuje identitu, ve které je aplikace spuštěná.
keyvault_client = SecretClient(vault_url=key_vault_url, credential=credential)

Vytvoření objektu SecretClient nevede k okamžitému ověření aplikace. Klient je jednoduše místní konstruktor, který ukládá adresu URL služby Key Vault a objekt přihlašovacích údajů. K ověřování a autorizaci dochází pouze v případě, že voláte operaci prostřednictvím klienta, například get_secret, která vygeneruje volání rozhraní REST API pro prostředek Azure.

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

I když je identita aplikace oprávněná pro přístup k Azure Key Vault, musí být také explicitně autorizovaná k provádění konkrétních operací , jako je čtení tajných kódů. Bez tohoto oprávnění se volání get_secret() nezdaří, i když je identita jinak platná. Aby tento problém s oprávněním vyřešil, nastaví skript pro zřizování pro aplikaci zásadu přístupu „get secrets“ pomocí příkazu Azure CLI az keyvault set-policy. Další informace naleznete v tématu Ověřování služby Key Vault a Udělení přístupu aplikace ke službě Key Vault. Druhý článek ukazuje, jak nastavit zásady přístupu pomocí portálu Azure. (Článek je určen také pro spravovanou identitu, ale stejně tak platí pro instanční objekt služby používaný při místním vývoji.)

Nakonec kód aplikace nastaví objekt klienta, přes který může zapisovat zprávy do fronty služby Azure Storage. Adresa URL fronty je v proměnné prostředí STORAGE_QUEUE_URL.

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

Stejně jako služba Azure Key Vault používá aplikace ke komunikaci se službou Azure Queue Storage konkrétní objekt klienta ze sady Azure SDK. V tomto případě používá třídu "QueueClient" z knihovny "azure-storage-queue".

K inicializaci klienta aplikace používá metodu from_queue_url , která poskytuje plně kvalifikovanou adresu URL fronty a objekt přihlašovacích údajů. Tento objekt přihlašovacích údajů je znovu dříve vytvořená DefaultAzureCredential instance, což představuje identitu, pod kterou aplikace běží.

Jak bylo uvedeno dříve v této příručce, tato autorizace se uděluje přiřazením role Přispěvatel dat Storage Queue k identitě aplikace, ať už prostřednictvím spravované identity v Azure, nebo instančního objektu během místního vývoje. Toto přiřazení role se provádí ve skriptu zřizování pomocí příkazu az role assignment createAzure CLI .

Za předpokladu, že je veškerý spouštěcí kód úspěšný, má aplikace všechny své interní proměnné, aby podporovala svůj /api/v1/getcode koncový bod rozhraní API.