Bagikan melalui


Bagian 6: Kode startup aplikasi utama

Bagian sebelumnya: Dependensi dan variabel lingkungan

Segera mengikuti import pernyataan, kode startup aplikasi menginisialisasi variabel kunci yang digunakan di seluruh fungsi penanganan permintaan.

Pertama, aplikasi membuat objek aplikasi Flask, yang berfungsi sebagai fondasi untuk menentukan rute dan menangani permintaan HTTP masuk. Selanjutnya, ia mengambil URL titik akhir API pihak ketiga dari variabel lingkungan. Ini memungkinkan titik akhir untuk dengan mudah dikonfigurasi tanpa memodifikasi basis kode:

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

number_url = os.environ["THIRD_PARTY_API_ENDPOINT"]

Selanjutnya, ia mendapatkan objek DefaultAzureCredential, yang merupakan kredensial yang direkomendasikan untuk digunakan saat mengautentikasi dengan layanan Azure. Lihat Cara mengautentikasi aplikasi yang dihosting Azure dengan DefaultAzureCredential.

credential = DefaultAzureCredential()

Saat dijalankan secara lokal, DefaultAzureCredential mencari variabel lingkungan AZURE_TENANT_ID, AZURE_CLIENT_ID, dan AZURE_CLIENT_SECRET yang berisi informasi untuk prinsipal layanan yang Anda gunakan untuk pengembangan lokal. Saat dijalankan di Azure, DefaultAzureCredential secara default menggunakan identitas terkelola yang ditugaskan oleh sistem yang telah diaktifkan pada aplikasi. Dimungkinkan untuk mengambil alih perilaku default dengan pengaturan aplikasi, tetapi dalam skenario contoh ini, kita menggunakan perilaku default.

Kode berikutnya mengambil kunci akses API pihak ketiga dari Azure Key Vault. Dalam skrip provisi, Key Vault dibuat menggunakan az keyvault create, dan rahasia disimpan dengan az keyvault secret set.

Sumber daya Key Vault itu sendiri diakses melalui URL, yang dimuat dari variabel lingkungan KEY_VAULT_URL.

key_vault_url = os.environ["KEY_VAULT_URL"]

Untuk mengambil rahasia dari Azure Key Vault, aplikasi harus membuat objek klien yang berkomunikasi dengan layanan Key Vault. Karena tujuannya adalah untuk membaca rahasia, aplikasi menggunakan kelas SecretClient dari perpustakaan azure.keyvault.secrets. Klien ini memerlukan dua input:

  • URL Key Vault – biasanya diambil dari variabel lingkungan
  • Objek kredensial – seperti DefaultAzureCredential instans yang dibuat sebelumnya, yang mewakili identitas tempat aplikasi berjalan.
keyvault_client = SecretClient(vault_url=key_vault_url, credential=credential)

Membuat objek SecretClient tidak langsung mengautentikasi aplikasi. Klien hanyalah konstruksi lokal yang menyimpan URL Key Vault dan objek kredensial. Autentikasi dan otorisasi hanya terjadi saat Anda memanggil operasi melalui klien, seperti get_secret, yang menghasilkan panggilan REST API ke sumber daya 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

Bahkan jika identitas aplikasi berwenang untuk mengakses Azure Key Vault, identitas tersebut juga harus diberi wewenang secara eksplisit untuk melakukan operasi tertentu—seperti membaca rahasia. Tanpa izin ini, panggilan ke get_secret() gagal, bahkan jika identitas tersebut valid. Untuk mengatasi hal ini, skrip provisi menetapkan kebijakan akses "dapatkan rahasia" untuk aplikasi menggunakan perintah Azure CLI, az keyvault set-policy. Untuk informasi selengkapnya, lihat Autentikasi Key Vault dan Memberikan akses aplikasi Anda ke Key Vault. Artikel terakhir menunjukkan cara mengatur kebijakan akses menggunakan portal Microsoft Azure. (Artikel ini juga ditulis untuk identitas terkelola, tetapi berlaku sama untuk prinsip layanan yang digunakan dalam pengembangan lokal.)

Terakhir, kode aplikasi menyiapkan objek klien di mana ia dapat menulis pesan ke Antrean Azure Storage. URL Antrean berada dalam variabel lingkungan STORAGE_QUEUE_URL.

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

Seperti halnya Azure Key Vault, aplikasi menggunakan objek klien tertentu dari Azure SDK untuk berinteraksi dengan Azure Queue Storage. Dalam hal ini, ini menggunakan kelas QueueClient dari pustaka azure-storage-queue.

Untuk menginisialisasi klien, aplikasi menggunakan from_queue_url metode , menyediakan URL antrean yang sepenuhnya memenuhi syarat dan objek kredensial. Objek kredensial ini adalah instans DefaultAzureCredential yang sama seperti yang dibuat sebelumnya, yang mewakili identitas di mana aplikasi dijalankan.

Seperti disebutkan sebelumnya dalam panduan ini, otorisasi tersebut diberikan dengan menetapkan peran "Kontributor Data Antrean Penyimpanan" ke identitas aplikasi - baik identitas terkelola di Azure atau perwakilan layanan selama pengembangan lokal. Penetapan peran ini dilakukan dalam skrip provisi menggunakan perintah az role assignment createAzure CLI .

Dengan asumsi semua kode startup ini berhasil, aplikasi memiliki semua variabel internalnya untuk mendukung titik akhir API /api/v1/getcode.