6. rész: Fő alkalmazás indítási kódja

Előző rész: Függőségek és környezeti változók

Az utasítások követését követően az import alkalmazás indítási kódja inicializálja a kérelemkezelési függvényekben használt kulcsváltozókat.

Először az alkalmazás létrehozza a Flask alkalmazásobjektumot, amely az útvonalak meghatározásának és a bejövő HTTP-kérések kezelésének alapja. Ezután lekéri a külső API-végpont URL-címét egy környezeti változóból. Ez a megközelítés megkönnyíti a végpont konfigurálását a kódbázis módosítása nélkül:

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

number_url = os.environ["THIRD_PARTY_API_ENDPOINT"]

Ezután lekéri az DefaultAzureCredential objektumot, amely az ajánlott hitelesítő adat, amelyet Azure szolgáltatásokkal való hitelesítéskor érdemes használni. Lásd: Azure-ban üzemeltetett alkalmazások hitelesítése DefaultAzureCredential.

credential = DefaultAzureCredential()

Helyi futtatáskor DefaultAzureCredential megkeresi a helyi fejlesztéshez használt szolgáltatásnév adatait tartalmazó AZURE_TENANT_ID, AZURE_CLIENT_IDés AZURE_CLIENT_SECRET környezeti változókat. Ha az Azure-ban fut, DefaultAzureCredential alapértelmezés szerint az alkalmazásban engedélyezett, rendszer által hozzárendelt felügyelt identitást használja. Az alapértelmezett viselkedést az alkalmazás beállításaival felülbírálhatja, de ebben a példában a rendszer az alapértelmezett viselkedést használja.

A következő kód lekéri a külső API hozzáférési kulcsát az Azure Key Vaultból. Az üzembe helyezési szkriptben a Key Vault a az keyvault create használatával jön létre, a titkot pedig a az keyvault secret set használatával tárolja.

Maga a Key Vault-erőforrás egy URL-címen keresztül érhető el, amely a KEY_VAULT_URL környezeti változóból töltődik be.

key_vault_url = os.environ["KEY_VAULT_URL"]

Ha le szeretne kérni egy titkos kulcsot az Azure Key Vaultból, az alkalmazásnak létre kell hoznia egy ügyfélobjektumot, amely kommunikál a Key Vault szolgáltatással. Mivel a cél egy titkos kód beolvasása, az alkalmazás a SecretClient kódtárból származó osztályt azure.keyvault.secrets használja. Ehhez az ügyfélhez két bemenet szükséges:

  • A Key Vault URL-címe – általában egy környezeti változóból kéri le
  • Hitelesítő objektum – például a DefaultAzureCredential korábban létrehozott példány, amely azt az identitást jelöli, amely alatt az alkalmazás fut.
keyvault_client = SecretClient(vault_url=key_vault_url, credential=credential)

Az objektum létrehozása SecretClient nem hitelesíti azonnal az alkalmazást. Az ügyfél egyszerűen egy helyi szerkezet, amely tárolja a Key Vault URL-címét és a hitelesítő objektumot. A hitelesítés és az engedélyezés csak akkor történik, ha egy műveletet az ügyfélen keresztül hív meg, például get_secret, amely REST API-hívást hoz létre az Azure-erőforráshoz.

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

Még akkor is, ha egy alkalmazás identitása jogosult az Azure Key Vault elérésére, külön engedéllyel kell rendelkeznie bizonyos műveletek végrehajtására is – például titkos kódok olvasására. Ezen engedély nélkül a hívás get_secret() meghiúsul, még akkor is, ha az identitás egyébként érvényes. Az engedély kezeléséhez a kiépítési szkript a Azure CLI paranccsal beállít egy "titkos kulcsok lekérése" hozzáférési szabályzatot az keyvault set-policyaz alkalmazáshoz. További információ: Key Vault-hitelesítés és Az alkalmazás hozzáférésének biztosítása a Key Vault. Az utóbbi cikk bemutatja, hogyan állíthat be hozzáférési szabályzatot a Azure portál használatával. (A cikk a felügyelt identitásra is vonatkozik, de ugyanúgy vonatkozik a helyi fejlesztésben használt szolgáltatásnévre.)

Végül az alkalmazáskód beállítja az ügyfélobjektumot, amelyen keresztül üzeneteket írhat egy Azure Storage-üzenetsorba. A várólista URL-címe a STORAGE_QUEUE_URLkörnyezeti változóban található.

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

Az Azure Key Vaulthoz hasonlóan az alkalmazás az Azure SDK egy adott ügyfélobjektumát használja az Azure Queue Storage használatához. Ebben az esetben az QueueClient azure-storage-queue kódtár osztályát használja.

Az ügyfél inicializálásához az alkalmazás a from_queue_url metódust használja, és megadja a sor teljesen képzett URL-címét és egy hitelesítési objektumot. Ez a hitelesítő objektum ismét a korábban létrehozott DefaultAzureCredential példány, amely azt az azonosítót jelöli, amely alatt az alkalmazás fut.

Ahogyan azt az útmutató korábbi részében már említettük, az engedélyezés a "Storage Queue Data Contributor" szerepkörnek az alkalmazás identitásához való hozzárendelésével adható meg – akár felügyelt identitást az Azure-ban, akár egy szolgáltatásnevet a helyi fejlesztés során. Ez a szerepkör-hozzárendelés a kiépítési szkriptben történik a Azure CLI paranccsalaz role assignment create.

Feltételezve, hogy ez az indítási kód sikeres, az alkalmazás rendelkezik az összes belső változójával a /api/v1/getcode API-végpont támogatásához.