Część 6. Kod uruchamiania głównej aplikacji

Poprzedniej części: zależności i zmienne środowiskowe

Bezpośrednio po instrukcjach import kod uruchamiania aplikacji inicjuje kluczowe zmienne używane w funkcjach obsługi żądań.

Najpierw aplikacja tworzy obiekt aplikacji Platformy Flask, który służy jako podstawa do definiowania tras i obsługi przychodzących żądań HTTP. Następnie pobiera adres URL punktu końcowego interfejsu API innej firmy ze zmiennej środowiskowej. Takie podejście ułatwia konfigurowanie punktu końcowego bez modyfikowania bazy kodu:

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

number_url = os.environ["THIRD_PARTY_API_ENDPOINT"]

Następnie pobiera obiekt DefaultAzureCredential, który jest zalecanym poświadczeniem używanym podczas uwierzytelniania w usługach Azure. Zobacz Uwierzytelnianie aplikacji hostowanych na platformie Azure przy użyciu ustawienia DefaultAzureCredential.

credential = DefaultAzureCredential()

Po uruchomieniu lokalnie DefaultAzureCredential wyszukuje zmienne środowiskowe AZURE_TENANT_ID, AZURE_CLIENT_IDi AZURE_CLIENT_SECRET zawierające informacje o jednostce usługi używanej do programowania lokalnego. Po uruchomieniu na platformie Azure, DefaultAzureCredential domyślnie używa tożsamości zarządzanej przypisanej przez system, która jest włączona w aplikacji. Domyślne zachowanie można zastąpić ustawieniami aplikacji, ale w tym przykładowym scenariuszu jest używane zachowanie domyślne.

Następnie kod pobiera klucz dostępu interfejsu API innej firmy z usługi Azure Key Vault. W skrypcie aprowizacji magazyn Key Vault jest tworzony przy użyciu az keyvault create, a wpis tajny jest przechowywany przy użyciu az keyvault secret set.

Sam zasób usługi Key Vault jest dostępny za pośrednictwem adresu URL, który jest ładowany ze zmiennej środowiskowej KEY_VAULT_URL.

key_vault_url = os.environ["KEY_VAULT_URL"]

Aby pobrać tajny klucz z Azure Key Vault, aplikacja musi utworzyć obiekt klienta, który komunikuje się z usługą Key Vault. Ponieważ celem jest odczytanie tajemnicy, aplikacja używa klasy z biblioteki SecretClientazure.keyvault.secrets. Ten klient wymaga dwóch danych wejściowych:

  • Adres URL usługi Key Vault — zazwyczaj pobierany ze zmiennej środowiskowej
  • Obiekt poświadczeń — taki jak wystąpienie DefaultAzureCredential utworzone wcześniej, które reprezentuje tożsamość, w ramach której działa aplikacja.
keyvault_client = SecretClient(vault_url=key_vault_url, credential=credential)

SecretClient Utworzenie obiektu nie powoduje natychmiastowego uwierzytelnienia aplikacji. Klient jest po prostu konstrukcją lokalną, która przechowuje adres URL usługi Key Vault i obiekt poświadczeń. Uwierzytelnianie i autoryzacja są wykonywane tylko wtedy, gdy wywołujesz operację za pośrednictwem klienta, na przykład get_secret, co generuje wywołanie interfejsu API REST do zasobu platformy 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

Nawet jeśli tożsamość aplikacji jest autoryzowana do uzyskiwania dostępu do Azure Key Vault, musi być również jawnie autoryzowana do wykonywania określonych operacji — takich jak odczytywanie wpisów tajnych. Bez tego zezwolenia wywołanie get_secret() nie powiedzie się, nawet jeśli tożsamość jest prawidłowa. Aby rozwiązać ten problem, skrypt aprowizacji ustawia zasady dostępu "get secrets" dla aplikacji przy użyciu Azure CLI polecenia , az keyvault set-policy. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie Key Vault i Przyznaj swojej aplikacji dostęp do Key Vault. W tym drugim artykule pokazano, jak ustawić zasady dostępu przy użyciu portalu Azure. (Artykuł został również napisany z myślą o tożsamości zarządzanej, ale ma również zastosowanie do jednostki usługi używanej podczas programowania lokalnego.)

Na koniec kod aplikacji konfiguruje obiekt klienta, za pomocą którego może zapisywać komunikaty w kolejce usługi Azure Storage. Adres URL kolejki znajduje się w zmiennej środowiskowej STORAGE_QUEUE_URL.

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

Podobnie jak w przypadku usługi Azure Key Vault aplikacja używa określonego obiektu klienta z zestawu Azure SDK do interakcji z usługą Azure Queue Storage. W tym przypadku używa QueueClient klasy z biblioteki azure-storage-queue.

Aby zainicjować klienta, aplikacja używa from_queue_url metody , podając w pełni kwalifikowany adres URL kolejki i obiekt poświadczeń. Ten obiekt poświadczeń to ponownie wcześniej utworzone wystąpienie DefaultAzureCredential, które reprezentuje tożsamość, w ramach której aplikacja działa.

Jak wspomniano wcześniej w tym przewodniku, autoryzacja ta jest udzielana przez przypisanie roli „Współautor danych w kolejce magazynowej” dla tożsamości aplikacji — tożsamości zarządzanej na platformie Azure lub jednostki usługi podczas lokalnego tworzenia aplikacji. To przypisanie roli jest wykonywane w skrygcie aprowizacji przy użyciu polecenia az role assignment createAzure CLI .

Zakładając, że cały ten kod startowy powiedzie się, aplikacja ma wszystkie zmienne wewnętrzne, aby obsługiwać swój punkt końcowy API /api/v1/getcode.