Udostępnij za pośrednictwem


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. Dzięki temu punkt końcowy można łatwo skonfigurować bez modyfikowania bazy kodu:

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

number_url = os.environ["THIRD_PARTY_API_ENDPOINT"]

Następnie uzyskuje obiekt DefaultAzureCredential, który jest zalecanym poświadczeniu do użycia podczas uwierzytelniania w usługach platformy 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. Istnieje możliwość zastąpienia domyślnego zachowania przy użyciu ustawień 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 Key Vault jest tworzony przy użyciu az keyvault create, a sekret jest przechowywany z 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)

Utworzenie obiektu SecretClient 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 usługi Azure Key Vault, musi być również wyraźnie upoważniona do wykonywania określonych operacji, takich jak odczytywanie tajemnic. 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 polecenia Azure CLI 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 witryny Azure Portal. (Artykuł jest również napisany dla tożsamości zarządzanej, ale ma równie zastosowanie do zasady serwisowej używanej w rozwoju lokalnym).

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 skrypcie aprowizacji przy użyciu polecenia interfejsu wiersza poleceń platformy Azure az role assignment create.

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.