Membuat dan menyebarkan aplikasi web Flask Python ke Azure dengan identitas terkelola yang ditetapkan sistem

Dalam tutorial ini, Anda menyebarkan kode Python Flask untuk membuat dan menyebarkan aplikasi web yang berjalan di Azure App Service. Aplikasi web menggunakan identitas terkelola yang ditetapkan sistem (koneksi tanpa kata sandi) dengan kontrol akses berbasis peran Azure untuk mengakses Azure Storage dan Azure Database for PostgreSQL - sumber daya Server Fleksibel. Kode ini menggunakan kelas DefaultAzureCredential dari pustaka klien Azure Identity untuk Python. Kelas secara DefaultAzureCredential otomatis mendeteksi bahwa identitas terkelola ada untuk App Service dan menggunakannya untuk mengakses sumber daya Azure lainnya.

Anda dapat mengonfigurasi koneksi tanpa kata sandi ke layanan Azure menggunakan Service Koneksi or atau Anda dapat mengonfigurasinya secara manual. Tutorial ini menunjukkan cara menggunakan Service Koneksi or. Untuk informasi selengkapnya tentang koneksi tanpa kata sandi, lihat Koneksi tanpa kata sandi untuk layanan Azure. Untuk informasi tentang service Koneksi or, lihat dokumentasi Service Koneksi or.

Tutorial ini menunjukkan kepada Anda cara membuat dan menyebarkan aplikasi web Python menggunakan Azure CLI. Perintah dalam tutorial ini ditulis untuk dijalankan dalam shell Bash. Anda dapat menjalankan perintah tutorial di lingkungan Bash mana pun dengan CLI yang diinstal, seperti lingkungan lokal Anda atau Azure Cloud Shell. Dengan beberapa modifikasi -- misalnya, mengatur dan menggunakan variabel lingkungan -- Anda dapat menjalankan perintah ini di lingkungan lain seperti shell perintah Windows. Untuk contoh penggunaan identitas terkelola yang ditetapkan pengguna, lihat Membuat dan menyebarkan aplikasi web Django ke Azure dengan identitas terkelola yang ditetapkan pengguna.

Mendapatkan aplikasi sampel

Sampel aplikasi Python menggunakan kerangka kerja Flask tersedia untuk membantu Anda mengikuti tutorial ini. Unduh atau kloning salah satu aplikasi sampel ke workstation lokal Anda.

  1. Kloning sampel dalam sesi Azure Cloud Shell.

    git clone https://github.com/Azure-Samples/msdocs-flask-web-app-managed-identity.git
    
  2. Navigasikan ke folder aplikasi.

    cd msdocs-flask-web-app-managed-identity
    

Membuat server Azure PostgreSQL

  1. Siapkan variabel lingkungan yang diperlukan untuk tutorial.

    LOCATION="eastus"
    RAND_ID=$RANDOM
    RESOURCE_GROUP_NAME="msdocs-mi-web-app"
    APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID"
    DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID"
    ADMIN_USER="demoadmin"
    ADMIN_PW="ChAnG33#ThsPssWD$RAND_ID"
    

    Penting

    ADMIN_PW harus berisi 8 hingga 128 karakter dari tiga kategori berikut: huruf besar bahasa Inggris, huruf kecil bahasa Inggris, angka, dan karakter non-nufanumerik. Saat membuat nama pengguna atau kata sandi jangan menggunakan karakter $. Kemudian Anda membuat variabel lingkungan dengan nilai-nilai ini di mana karakter $ memiliki arti khusus dalam kontainer Linux yang digunakan untuk menjalankan aplikasi Python.

  2. Buat grup sumber daya dengan perintah az group create.

    az group create --location $LOCATION --name $RESOURCE_GROUP_NAME
    
  3. Buat server PostgreSQL dengan perintah az postgres flexible-server create . (Perintah ini dan berikutnya menggunakan karakter kelanjutan baris untuk Bash Shell ('\'). Ubah karakter kelanjutan baris untuk shell Anda jika diperlukan.)

    az postgres flexible-server create \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $DB_SERVER_NAME \
      --location $LOCATION \
      --admin-user $ADMIN_USER \
      --admin-password $ADMIN_PW \
      --sku-name Standard_D2ds_v4
    

    Nama sku adalah nama tingkat harga dan konfigurasi komputasi. Untuk informasi selengkapnya, lihat penentuan harga Azure Database untuk for PostgreSQL. Untuk mencantumkan SKU yang tersedia, gunakan az postgres flexible-server list-skus --location $LOCATION.

  4. Buat database bernama restaurant menggunakan perintah az postgres flexible-server execute .

    az postgres flexible-server execute \
      --name $DB_SERVER_NAME \
      --admin-user $ADMIN_USER \
      --admin-password $ADMIN_PW \
      --database-name postgres \
      --querytext 'create database restaurant;'
    

Membuat Azure App Service dan menyebarkan kode

  1. Buat layanan aplikasi menggunakan perintah az webapp up .

    az webapp up \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --runtime PYTHON:3.9 \
      --sku B1
    

    Sku menentukan ukuran (CPU, memori) dan biaya paket layanan aplikasi. Paket layanan B1 (Dasar) dikenakan biaya kecil dalam langganan Azure Anda. Untuk daftar lengkap paket App Service, lihat halaman harga App Service.

  2. Konfigurasikan App Service untuk menggunakan start.sh di repositori dengan perintah az webapp config set .

    az webapp config set \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --startup-file "start.sh"
    

Membuat konektor tanpa kata sandi ke sumber daya Azure

Perintah Service Koneksi or mengonfigurasi sumber daya Azure Storage dan Azure Database for PostgreSQL untuk menggunakan identitas terkelola dan kontrol akses berbasis peran Azure. Perintah membuat pengaturan aplikasi di App Service yang menghubungkan aplikasi web Anda ke sumber daya ini. Output dari perintah mencantumkan tindakan konektor layanan yang diambil untuk mengaktifkan kemampuan tanpa kata sandi.

  1. Tambahkan konektor layanan PostgreSQL dengan perintah az webapp connection create postgres-flexible . Identitas terkelola yang ditetapkan sistem digunakan untuk mengautentikasi aplikasi web ke sumber daya target, PostgreSQL dalam hal ini.

    az webapp connection create postgres-flexible \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --target-resource-group $RESOURCE_GROUP_NAME \
      --server $DB_SERVER_NAME \
      --database restaurant \
      --client-type python \
      --system-identity
    
  2. Tambahkan konektor layanan penyimpanan dengan perintah az webapp connection create storage-blob .

    Perintah ini juga menambahkan akun penyimpanan dan menambahkan aplikasi web dengan peran Kontributor Data Blob Penyimpanan ke akun penyimpanan.

    STORAGE_ACCOUNT_URL=$(az webapp connection create storage-blob \
      --new true \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --target-resource-group $RESOURCE_GROUP_NAME \
      --client-type python \
      --system-identity \
      --query configurations[].value \
      --output tsv)
    STORAGE_ACCOUNT_NAME=$(cut -d . -f1 <<< $(cut -d / -f3 <<< $STORAGE_ACCOUNT_URL))
    

Membuat kontainer di akun penyimpanan

Contoh aplikasi Python menyimpan foto yang dikirimkan oleh peninjau sebagai blob dalam kontainer di akun penyimpanan Anda.

  • Saat pengguna mengirimkan foto dengan ulasan mereka, aplikasi sampel menulis gambar ke kontainer menggunakan identitas terkelola yang ditetapkan sistem untuk autentikasi dan otorisasi. Anda mengonfigurasi fungsionalitas ini di bagian terakhir.

  • Saat pengguna melihat ulasan untuk restoran, aplikasi mengembalikan tautan ke foto dalam penyimpanan blob untuk setiap ulasan yang memiliki satu yang terkait dengannya. Agar browser menampilkan foto, browser harus dapat mengaksesnya di akun penyimpanan Anda. Data blob harus tersedia untuk dibaca secara publik melalui akses anonim (tidak diaturentikasi).

Untuk meningkatkan keamanan, akun penyimpanan dibuat dengan akses anonim ke data blob yang dinonaktifkan secara default. Di bagian ini, Anda mengaktifkan akses baca anonim di akun penyimpanan Anda lalu membuat kontainer bernama foto yang menyediakan akses publik (anonim) ke blob-nya.

  1. Perbarui akun penyimpanan untuk memungkinkan akses baca anonim ke blob dengan perintah az storage account update .

    az storage account update \
      --name $STORAGE_ACCOUNT_NAME \
      --resource-group $RESOURCE_GROUP_NAME \
      --allow-blob-public-access true
    

    Mengaktifkan akses anonim pada akun penyimpanan tidak memengaruhi akses untuk blob individual. Anda harus secara eksplisit mengaktifkan akses publik ke blob di tingkat kontainer.

  2. Buat kontainer yang disebut foto di akun penyimpanan dengan perintah az storage container create. Izinkan akses baca anonim (publik) ke blob di kontainer yang baru dibuat.

    az storage container create \
      --account-name $STORAGE_ACCOUNT_NAME \
      --name photos \
      --public-access blob \
      --account-key $(az storage account keys list --account-name $STORAGE_ACCOUNT_NAME \
          --query [0].value --output tsv) 
    

    Catatan

    Untuk brevity, perintah ini menggunakan kunci akun penyimpanan untuk mengotorisasi dengan akun penyimpanan. Untuk sebagian besar skenario, pendekatan yang direkomendasikan Microsoft adalah menggunakan peran MICROSOFT Entra ID dan Azure (RBAC). Untuk sekumpulan instruksi cepat, lihat Mulai Cepat: Membuat, mengunduh, dan mencantumkan blob dengan Azure CLI. Perhatikan bahwa beberapa peran Azure memungkinkan Anda membuat kontainer di akun penyimpanan, termasuk "Pemilik", "Kontributor", "Pemilik Data Blob Penyimpanan", dan "Kontributor Data Blob Penyimpanan".

Untuk mempelajari selengkapnya tentang akses baca anonim ke data blob, lihat Mengonfigurasi akses baca anonim untuk kontainer dan blob.

Menguji aplikasi web Python di Azure

Contoh aplikasi Python menggunakan paket azure.identity dan kelasnya DefaultAzureCredential . Saat aplikasi berjalan di Azure, DefaultAzureCredential secara otomatis mendeteksi apakah identitas terkelola ada untuk App Service dan, jika demikian, menggunakannya untuk mengakses sumber daya Azure lainnya (penyimpanan dan PostgreSQL dalam hal ini). Tidak perlu menyediakan kunci penyimpanan, sertifikat, atau kredensial ke App Service untuk mengakses sumber daya ini.

  1. Telusuri ke aplikasi yang disebarkan di URL http://$APP_SERVICE_NAME.azurewebsites.net.

    Diperlukan waktu satu atau dua menit agar aplikasi dapat dimulai. Jika Anda melihat halaman aplikasi default yang bukan halaman aplikasi sampel default, tunggu sebentar dan refresh browser.

  2. Uji fungsionalitas aplikasi sampel dengan menambahkan restoran dan beberapa ulasan dengan foto untuk restoran.

    Informasi restoran dan ulasan disimpan di Azure Database for PostgreSQL dan foto disimpan di Azure Storage. Berikut adalah contoh cuplikan layar:

    Cuplikan layar aplikasi sampel memperlihatkan fungsionalitas ulasan restoran menggunakan Azure App Service, Azure PostgreSQL Database, dan Azure Storage.

Penghapusan

Dalam tutorial ini, semua sumber daya Azure dibuat dalam grup sumber daya yang sama. Menghapus grup sumber daya akan dihapus dengan perintah az group delete akan menghapus semua sumber daya dalam grup sumber daya dan merupakan cara tercepat untuk menghapus semua sumber daya Azure yang digunakan untuk aplikasi Anda.

az group delete  --name $RESOURCE_GROUP_NAME 

Anda dapat secara opsional menambahkan --no-wait argumen untuk mengizinkan perintah kembali sebelum operasi selesai.

Langkah berikutnya