Bagikan melalui


Tutorial: Mengonfigurasi penyebaran berkelanjutan untuk aplikasi web Python di Azure Container Apps

Artikel ini adalah bagian dari seri tutorial tentang cara membuat kontainer dan menyebarkan aplikasi web Python untuk Azure Container Apps. Container Apps memungkinkan Anda menyebarkan aplikasi kontainer tanpa mengelola infrastruktur yang kompleks.

Dalam tutorial ini, Anda:

  • Konfigurasikan penyebaran berkelanjutan untuk aplikasi kontainer dengan menggunakan alur kerja GitHub Actions .
  • Buat perubahan pada salinan repositori sampel untuk memicu alur kerja Tindakan GitHub.
  • Menyelesaikan masalah yang mungkin Anda temui dalam mengonfigurasi penyebaran berkelanjutan.
  • Hapus sumber daya yang tidak Anda butuhkan saat menyelesaikan seri tutorial.

Penyebaran berkelanjutan terkait dengan praktik DevOps integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD), yang merupakan otomatisasi alur kerja pengembangan aplikasi Anda.

Diagram berikut menyoroti tugas dalam tutorial ini.

Diagram layanan yang terlibat dalam penyebaran aplikasi Python di Azure Container Apps, dengan bagian tentang penyebaran berkelanjutan disorot.

Prasyarat

Untuk menyiapkan penyebaran berkelanjutan, Anda memerlukan:

  • Sumber daya (dan konfigurasinya) yang Anda buat di tutorial sebelumnya, yang mencakup instans Azure Container Registry dan aplikasi kontainer di Azure Container Apps.

  • Akun GitHub tempat Anda menyimpan salinan kode sampel (Django atau Flask) dan yang dapat Anda hubungkan ke Azure Container Apps. (Jika Anda mengunduh kode sampel alih-alih "forking", pastikan Anda mendorong repositori lokal Anda ke akun GitHub Anda.)

  • Opsional, Git diinstal di lingkungan pengembangan Anda untuk mempermudah membuat perubahan kode dan mengunggah ke repo Anda di GitHub. Atau, Anda dapat membuat perubahan langsung di GitHub.

Mengonfigurasi penyebaran berkelanjutan untuk kontainer

Dalam tutorial sebelumnya, Anda membuat dan mengonfigurasi aplikasi kontainer di Azure Container Apps. Bagian dari konfigurasi adalah menarik gambar Docker dari instans Azure Container Registry. Gambar kontainer ditarik dari registri saat Anda membuat kontainer revisi, seperti ketika Anda pertama kali menyiapkan aplikasi kontainer.

Di bagian ini, Anda menyiapkan penyebaran berkelanjutan dengan menggunakan alur kerja GitHub Actions. Dengan penyebaran berkelanjutan, gambar Docker baru dan revisi kontainer dibuat berdasarkan pemicu tertentu. Pemicu dalam tutorial ini adalah perubahan apa pun pada cabang utama dari repositori Anda, misalnya melalui permintaan tarik. Saat alur kerja dipicu, alur kerja membuat citra Docker baru, mengunggahnya ke instance Azure Container Registry, dan memperbarui aplikasi kontainer ke revisi baru dengan menggunakan citra baru.

Anda dapat menjalankan perintah Azure CLI di Azure Cloud Shell atau di stasiun kerja tempat Azure CLI diinstal.

Jika Anda menjalankan perintah di shell Git Bash di komputer Windows, masukkan perintah berikut sebelum melanjutkan:

export MSYS_NO_PATHCONV=1
  1. Buat perwakilan layanan dengan menggunakan perintah az ad sp create-for-rbac:

    az ad sp create-for-rbac \
    --name <app-name> \
    --role Contributor \
    --scopes "/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>"
    

    Dalam perintah:

    • <app-name> adalah nama tampilan opsional untuk perwakilan layanan. Jika Anda meninggalkan opsi --name, GUID dihasilkan sebagai nama tampilan.
    • < > ID langganan adalah GUID yang secara unik mengidentifikasi langganan Anda di Azure. Jika tidak mengetahui ID langganan, Anda dapat menjalankan perintah az account show dan menyalinnya dari properti id dalam output.
    • <resource-group-name> adalah nama grup sumber daya yang berisi kontainer Azure Container Apps. Kontrol akses berbasis peran (RBAC) berada di tingkat grup sumber daya. Jika Anda mengikuti langkah-langkah dalam tutorial sebelumnya, nama grup sumber daya pythoncontainer-rg.

    Simpan output perintah ini untuk langkah berikutnya. Secara khusus, simpan ID klien ( propertiappId), rahasia klien ( propertipassword), dan ID penyewa ( propertitenant).

  2. Konfigurasikan GitHub Actions dengan menggunakan perintah az containerapp github-action add:

    az containerapp github-action add \
    --resource-group <resource-group-name> \
    --name python-container-app \
    --repo-url <https://github.com/userid/repo> \
    --branch main \
    --registry-url <registry-name>.azurecr.io \
    --service-principal-client-id <client-id> \
    --service-principal-tenant-id <tenant-id> \
    --service-principal-client-secret <client-secret> \
    --login-with-github
    

    Dalam perintah:

    • Nama grup sumber daya <> adalah nama grup sumber daya tersebut. Dalam tutorial ini, pythoncontainer-rg.
    • <https://github.com/userid/repo> adalah URL repositori GitHub Anda. Dalam tutorial ini, antara https://github.com/userid/msdocs-python-django-azure-container-apps atau https://github.com/userid/msdocs-python-flask-azure-container-apps. Dalam URL tersebut, userid adalah ID pengguna GitHub Anda.
    • < > nama registri adalah instans Azure Container Registry yang sudah ada yang Anda buat di tutorial sebelumnya, atau yang dapat Anda gunakan.
    • < > id klien adalah nilai properti appId dari perintah az ad sp create-for-rbac sebelumnya. ID adalah GUID dengan format 00000000-0000-0000-0000-00000000.
    • < > id penyewa adalah nilai properti tenant dari perintah az ad sp create-for-rbac sebelumnya. ID tersebut juga merupakan GUID yang mirip dengan ID klien.
    • < > rahasia klien adalah nilai properti password dari perintah az ad sp create-for-rbac sebelumnya.

Dalam konfigurasi penyebaran berkelanjutan, perwakilan layanan memungkinkan GitHub Actions mengakses dan memodifikasi sumber daya Azure. Peran yang diberikan kepada entitas layanan membatasi akses ke sumber daya. Perwakilan layanan diberikan peran Kontributor bawaan pada grup sumber daya yang berisi aplikasi kontainer.

Jika Anda mengikuti langkah-langkah untuk portal, prinsipal layanan secara otomatis dibuat untuk Anda. Jika Anda mengikuti langkah-langkah di Azure CLI, Anda secara eksplisit membuat entitas layanan sebelum mengonfigurasi penerapan berkelanjutan.

Menyebarkan ulang aplikasi web dengan GitHub Actions

Pada bagian ini, Anda membuat perubahan pada salinan repositori sampel yang telah Anda fork. Setelah itu, Anda dapat mengonfirmasi bahwa perubahan secara otomatis disebarkan ke situs web.

Jika Anda belum melakukannya, buat fork dari repositori sampel (Django atau Flask). Anda dapat membuat perubahan kode secara langsung di GitHub atau di lingkungan pengembangan Anda dari baris perintah dengan Git.

  1. Buka fork dari repositori sampel Anda dan mulai di cabang utama .

    Cuplikan layar yang memperlihatkan cabang utama dalam fork repositori sampel.

  2. Buat perubahan:

    1. Buka file /templates/base.html. (Untuk Django, jalurnya adalah restaurant_review/templates/restaurant_review/base.html.)
    2. Pilih Edit dan ubah frasa Azure Restaurant Review menjadi Azure Restaurant Review - Redeployed.

    Cuplikan layar yang memperlihatkan cara membuat perubahan dalam file templat di fork repositori sampel.

  3. Di bagian bawah halaman yang sedang Anda edit, pastikan Komit langsung ke cabang utama dipilih. Lalu pilih tombol Terapkan perubahan.

    Cuplikan layar yang memperlihatkan pilihan untuk melakukan perubahan dalam file templat di fork repositori sampel.

Komit memulai proses kerja GitHub Actions.

Nota

Tutorial ini menunjukkan membuat perubahan langsung di cabang utama . Dalam alur kerja perangkat lunak umum, Anda membuat perubahan di cabang selain main dan kemudian membuat permintaan pull untuk menggabungkan perubahan menjadimain . Pull request juga memulai alur kerja.

Memahami Tindakan GitHub

Menampilkan riwayat alur kerja

Jika Anda perlu melihat riwayat alur kerja, gunakan salah satu prosedur berikut.

Pada GitHub, buka fork repositori sampel Anda dan buka tab Actions.

Cuplikan layar yang memperlihatkan alur kerja pada tab Tindakan untuk repositori.

Rahasia alur kerja

File alur kerja .github/workflows/<>.yml yang ditambahkan ke repositori mencakup tempat penampung untuk kredensial yang diperlukan untuk pekerjaan build dan pembaruan aplikasi kontainer dari alur kerja. Informasi kredensial disimpan dienkripsi di area Pengaturan repositori, di bawah Rahasia dan variabelKeamananTindakan.

Cuplikan layar yang memperlihatkan kredensial sebagai rahasia GitHub Actions.

Jika informasi kredensial berubah, Anda dapat memperbaruinya di sini. Misalnya, jika kata sandi Azure Container Registry diregenerasi, Anda perlu memperbarui nilai REGISTRY_PASSWORD. Untuk informasi selengkapnya, lihat Rahasia terenkripsi dalam dokumentasi GitHub.

Aplikasi yang diotorisasi oleh OAuth

Saat menyiapkan penyebaran berkelanjutan, Anda menetapkan Azure Container Apps sebagai aplikasi OAuth resmi untuk akun GitHub Anda. Container Apps menggunakan akses resmi untuk membuat file GITHub Actions YAML di .github/workflows/<workflow-name>.yml. Anda dapat melihat aplikasi yang diotorisasi dan mencabut izin di akun Anda, di bawah Integrasi>Aplikasi.

Cuplikan layar yang menunjukkan lokasi aplikasi resmi untuk pengguna di GitHub.

Mengatasi Masalah

Anda mengalami kesalahan ketika menyiapkan perwakilan layanan melalui Azure CLI

Bagian ini dapat membantu Anda memecahkan masalah kesalahan yang Anda alami saat menyiapkan perwakilan layanan dengan menggunakan perintah Azure CLI az ad sp create-for-rba.

Jika Anda mendapatkan kesalahan yang berisi "InvalidSchema: Tidak ada adaptor koneksi yang ditemukan":

Jika Anda mendapatkan kesalahan yang berisi "Lebih dari satu aplikasi memiliki nama tampilan yang sama":

  • Nama tersebut sudah digunakan untuk service principal. Pilih nama lain, atau hilangkan argumen --name. GUID akan dibuat secara otomatis dan digunakan sebagai nama tampilan.

Alur kerja GitHub Actions gagal

Untuk memeriksa status alur kerja, buka tab Tindakan dari repositori:

  • Jika ada alur kerja yang gagal, teliti secara mendetail file alur kerja. Harus ada dua pekerjaan: membangun dan menyebarkan. Untuk pekerjaan yang gagal, periksa output dari tugas pekerjaan tersebut untuk mencari masalah.
  • Jika ada pesan kesalahan yang berisi "Batas waktu jabat tangan TLS", jalankan alur kerja secara manual. Di repositori, pada tab Tindakan, pilih Picu penyebaran otomatis untuk melihat apakah batas waktu merupakan masalah sementara.
  • Jika Anda menyiapkan penyebaran berkelanjutan untuk aplikasi kontainer seperti yang ditunjukkan dalam tutorial ini, file alur kerja (.github/workflows/<workflow-name>.yml) dibuat secara otomatis untuk Anda. Anda tidak perlu memodifikasi file ini untuk tutorial ini. Jika Anda melakukannya, kembalikan perubahan Anda dan uji alur kerjanya lagi.

Laman web tidak menampilkan perubahan yang Anda gabungkan di cabang utama

Di GitHub:

  • Periksa apakah alur kerja GitHub Actions telah dijalankan dan Anda memasukkan perubahan ke cabang yang memicu alur kerja tersebut.

Di portal Microsoft Azure:

  • Periksa instans Azure Container Registry untuk melihat apakah gambar Docker baru dibuat dengan stempel waktu setelah perubahan Anda ke cabang.

  • Periksa log aplikasi kontainer untuk melihat apakah ada kesalahan pemrograman:

    1. Buka aplikasi kontainer, lalu buka Manajemen Revisi><kontainer aktif>>Detail revisi>log konsol.
    2. Pilih urutan kolom untuk menampilkan Time Generated, Stream_s, dan Log_s.
    3. Urutkan log menurut yang terbaru dan cari pesan Python stderr dan stdout di kolom Stream_s. Pesan print adalah output stdout dari Python.

Di Azure CLI:

Anda ingin menghentikan penyebaran berkelanjutan

Menghentikan penyebaran berkelanjutan berarti memutus sambungan aplikasi kontainer Anda dari repositori Anda.

Di portal Microsoft Azure:

  • Buka aplikasi kontainer. Pada menu layanan, pilih Penyebaran berkelanjutan, lalu pilih Putuskan sambungan.

Di Azure CLI:

Setelah Anda memutuskan sambungan:

  • File.yml nama alur kerja .github/workflows/dihapus dari repositori Anda.
  • Kunci rahasia tidak dihapus dari repositori.
  • Azure Container Apps tetap sebagai aplikasi OAuth resmi untuk akun GitHub Anda.
  • Di Azure, kontainer dibiarkan dalam keadaan kontainer terakhir yang disebarkan. Anda dapat menyambungkan kembali aplikasi kontainer dengan instans Azure Container Registry, sehingga revisi kontainer baru dapat menggunakan citra terbaru.
  • Di Azure, prinsipal layanan yang Anda buat dan gunakan untuk penyebaran berkelanjutan tidak dihapus.

Menghapus sumber daya

Jika Anda sudah selesai dengan seri tutorial dan Anda tidak ingin dikenakan biaya tambahan, hapus sumber daya yang Anda gunakan.

Menghapus grup sumber daya menghapus semua sumber daya dalam grup dan merupakan cara tercepat untuk menghapus sumber daya. Untuk contoh cara menghapus kelompok sumber daya, lihat tutorial pembersihan Containerize.

Jika Anda berencana untuk membangun tutorial ini, berikut adalah beberapa langkah berikutnya yang dapat Anda lakukan: