Aracılığıyla paylaş


Öğretici: Azure Container Apps'te Python web uygulaması için sürekli dağıtımı yapılandırma

Bu makale, Azure Container Appsiçin bir Python web uygulamasını kapsayıcıya alma ve dağıtma hakkında öğretici serisinin bir parçasıdır. Container Apps, karmaşık altyapıyı yönetmeden kapsayıcılı uygulamalar dağıtmanıza olanak tanır.

Bu öğreticide siz:

  • GitHub Actions iş akışı kullanarak kapsayıcı uygulaması için sürekli dağıtımı yapılandırın.
  • GitHub Actions iş akışını tetikleme amacıyla örnek deponun bir kopyasında değişiklik yapın.
  • Sürekli dağıtımı yapılandırmayla ilgili karşılaşabileceğiniz sorunları giderin.
  • Öğretici serisini bitirdiğinizde ihtiyacınız olmayan kaynakları kaldırın.

Sürekli dağıtım, uygulama geliştirme iş akışınızın otomasyonu olan DevOps sürekli tümleştirme ve sürekli teslim (CI/CD) uygulamasıyla ilgilidir.

Aşağıdaki diyagramda bu öğreticideki görevler vurgulanır.

Sürekli dağıtımla ilgili bölümlerin vurgulandığı, Azure Container Apps'te Python uygulaması dağıtmaya katılan hizmetlerin diyagramı.

Önkoşullar

Sürekli dağıtımı ayarlamak için şunları yapmanız gerekir:

Kapsayıcı için sürekli dağıtımı yapılandırma

Önceki öğreticide, Azure Container Apps'te bir kapsayıcı uygulaması oluşturup yapılandırmıştınız. Yapılandırmanın bir bölümü, Bir Azure Container Registry örneğinden Docker görüntüsü çekiyordu. Kapsayıcı görüntüsü, kapsayıcı uygulamasını ilk kez ayarladığınızda olduğu gibibir kapsayıcı düzeltmesi oluşturduğunuzda kayıt defterinden çekilir.

Bu bölümde, GitHub Actions iş akışını kullanarak sürekli dağıtım ayarlarsınız. Sürekli dağıtımda, tetikleyici temelinde yeni bir Docker görüntüsü ve kapsayıcı revizyonu oluşturulur. Bu öğreticideki tetikleyici, çekme isteği gibi deponuzun ana dalında meydana gelen herhangi bir değişikliktir. İş akışı tetiklendiğinde yeni bir Docker görüntüsü oluşturur, bunu Azure Container Registry örneğine gönderir ve kapsayıcı uygulamasını yeni görüntüyü kullanarak yeni bir düzeltmeye güncelleştirir.

Azure CLI komutlarını Azure Cloud Shell veya Azure CLI yüklü bir iş istasyonunda çalıştırabilirsiniz.

Windows bilgisayarda Git Bash kabuğunda komut çalıştırıyorsanız devam etmeden önce aşağıdaki komutu girin:

export MSYS_NO_PATHCONV=1
  1. hizmet sorumlusu oluşturmak için az ad sp create-for-rbac komutunu kullanın:

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

    Komutta şöyle:

    • <uygulama adı>, hizmet sorumlusu için isteğe bağlı bir görünen addır. --name seçeneğini bırakırsanız, görünen ad olarak bir GUID oluşturulur.
    • <abonelik kimliği>, Azure'da aboneliğinizi benzersiz olarak tanımlayan GUID'dir. Abonelik kimliğinizi bilmiyorsanız az account show komutunu çalıştırabilir ve çıktıdaki id özelliğinden kopyalayabilirsiniz.
    • <kaynak grubu-adı>, Azure Container Apps kapsayıcısını içeren bir kaynak grubunun adıdır. Rol tabanlı erişim denetimi (RBAC), kaynak grubu düzeyindedir. Önceki öğreticideki adımları izlediyseniz kaynak grubunun adı pythoncontainer-rg.

    Sonraki adım için bu komutun çıkışını kaydedin. Özellikle, istemci kimliğini (appId özelliği), istemci sırrını (password özelliği) ve kiracı kimliğini (tenant özelliği) kaydedin.

  2. GitHub Actions'ı yapılandırmak için az containerapp github-action add komutunu kullanın.

    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
    

    Komutta şöyle:

    • <kaynak grubu-adı> kaynak grubunun adıdır. Bu öğreticide, işlem pythoncontainer-rgolarak gösterilmektedir.
    • <https://github.com/userid/repo>, GitHub deponuzun URL'sidir. Bu öğreticide ya https://github.com/userid/msdocs-python-django-azure-container-apps ya da https://github.com/userid/msdocs-python-flask-azure-container-apps. Bu URL'lerde GitHub kullanıcı kimliğiniz userid'dır.
    • <kayıt defteri-adı>, önceki öğreticide oluşturduğunuz mevcut Azure Container Registry örneği veya kullanabileceğiniz örnektir.
    • <client-id>, önceki appId komutundan az ad sp create-for-rbac özelliğinin değeridir. Kimlik, 00000000-0000-0000-0000-00000000biçimindeki bir GUID'dir.
    • <tenant-id>, önceki tenant komutundaki az ad sp create-for-rbac özelliğinin değeridir. Kimlik ayrıca istemci kimliğine benzer bir GUID'dir.
    • <istemci gizli anahtarı>, önceki password komutundan az ad sp create-for-rbac özelliğinin değeridir.

Sürekli dağıtım yapılandırmasında hizmet sorumlusu GitHub Actions'ın Azure kaynaklarına erişmesine ve bunları değiştirmesine olanak tanır. Hizmet sorumlusuna atanan roller kaynaklara erişimi kısıtlar. Hizmet sorumlusuna, kapsayıcı uygulamanın bulunduğu kaynak grubunda yerleşik Katılımcı rolü atanmıştır.

Portalın adımlarını izlediyseniz, hizmet sorumlusu sizin için otomatik olarak oluşturulur. Azure CLI adımlarını izlediyseniz, sürekli dağıtımı yapılandırmadan önce hizmet sorumlusunu açıkça oluşturdunuz.

GitHub Actions ile web uygulamasını yeniden dağıtma

Bu bölümde, örnek deponun çatallanmış kopyasında bir değişiklik yapacaksınız. Bundan sonra, değişikliğin web sitesine otomatik olarak dağıtıldığını onaylayabilirsiniz.

Henüz yapmadıysanız örnek deposunun fork'unu oluşturun (Django veya Flask). Kodunuzu doğrudan GitHub'dan veya geliştirme ortamınızda Gitkullanarak bir komut satırından değiştirebilirsiniz.

  1. Örnek depo çatalınıza gidin ve ana dalından başlayın.

    Örnek deponun çatalında ana dalı gösteren ekran görüntüsü.

  2. Değişiklik yapın:

    1. /templates/base.html dosyasına gidin. (Django için yol restaurant_review/templates/restaurant_review/base.html.)
    2. Düzenle seçin ve Azure Restaurant Review ifadesini Azure Restaurant Review - Redeployedolarak değiştirin.

    Örnek depo çatalındaki bir şablon dosyasında nasıl değişiklik yapılacağını gösteren ekran görüntüsü.

  3. Düzenlemekte olduğunuz sayfanın alt kısmında Doğrudan ana dalda değişiklik yap seçili olduğundan emin olun. Ardından Değişiklikleri Onayla düğmesini seçin.

    Örnek deponun çatalında bir şablon dosyasında değişiklik işlemeye yönelik seçimleri gösteren ekran görüntüsü.

İşleme, GitHub Actions iş akışını başlatıyor.

Not

Bu kılavuz, doğrudan ana dalında değişiklik yapmayı gösterir. Tipik yazılım iş akışlarında, ana dışında bir dalda değişiklik yapar ve ardından değişikliği anaile birleştirmek için bir pull request oluşturursunuz. Çekme talepleri iş akışını da başlatıyor.

GitHub Actions'i anlama

İş akışı geçmişini görüntüleme

İş akışı geçmişini görüntülemeniz gerekiyorsa aşağıdaki yordamlardan birini kullanın.

GitHub'da, örnek repository forkunuza gidin ve Eylemler sekmesini açın.

Deponun Eylemler sekmesinde iş akışlarını gösteren ekran görüntüsü.

İş akışı sırları

Depoya eklenen .github/workflows/<iş akışı adı>.yml iş akışı dosyası, iş akışının derleme ve kapsayıcı uygulama güncelleme görevleri için gerekli olan kimlik bilgileri için yer tutucular içerir. Kimlik bilgileri deponun Ayarları alanında, Güvenlik>Gizli Dizileri ve değişkenleri>Eylemleraltında şifrelenmiş olarak depolanır.

Kimlik bilgilerini GitHub Actions gizli bilgileri olarak gösteren ekran görüntüsü.

Kimlik bilgileri değişirse, burada güncelleştirebilirsiniz. Örneğin, Azure Container Registry parolaları yeniden oluşturulursa, REGISTRY_PASSWORD değerini güncelleştirmeniz gerekir. Daha fazla bilgi için GitHub belgelerinde Şifrelenmiş sırlar bölümüne bakın.

OAuth yetkili uygulamaları

Sürekli dağıtımı ayarlarken, Azure Container Apps'i GitHub hesabınız için yetkili bir OAuth uygulaması olarak belirlersiniz. Container Apps, GitHub Actions YAML dosyası oluşturmak için yetkili erişimi kullanarak .github/workflows/<iş akışı-adı>.ymldosyasını oluşturur. Integrations>Applicationsaltında, yetkili uygulamalarınızı görüntüleyebilir ve hesabınızdaki izinleri iptal edebilirsiniz.

GitHub'da bir kullanıcının yetkili uygulamalarının konumunu gösteren ekran görüntüsü.

Sorun Giderme

Azure CLI aracılığıyla hizmet sorumlusu ayarlarken hata alıyorsunuz

Bu bölüm, Azure CLI az ad sp create-for-rba komutunu kullanarak hizmet sorumlusu ayarlarken oluşan hataları gidermenize yardımcı olabilir.

"InvalidSchema: Bağlantı bağdaştırıcısı bulunamadı" hata iletisiyle karşılaşırsanız:

  • Çalıştırdığınız komut kabuğunu kontrol edin. Bash kabuğu kullanıyorsanız MSYS_NO_PATHCONV değişkenlerini export MSYS_NO_PATHCONV=1 olarak ayarlayın.

    Daha fazla bilgi için GitHub sorunu ve'e bakın: Git Bash'ten Azure CLI ile hizmet ilkesi oluşturulamıyor.

"Eğer 'Birden fazla uygulama aynı görünen ada sahip' hatasını alırsanız:"

  • Hizmet sorumlusu için ad zaten alınmış. Başka bir ad seçin veya --name argümanını kaldırın. Bir GUID, görünen ad olarak otomatik olarak oluşturulacaktır.

GitHub Actions iş akışı başarısız oldu

bir iş akışının durumunu denetlemek için deponun Eylemler sekmesine gidin:

  • Başarısız bir iş akışı varsa iş akışı dosyasını inceleyin. İki iş olmalıdır: oluşturma ve yayınlama. Başarısız bir iş için, sorunları aramak için işin görevlerinin çıktısını denetleyin.
  • "TLS el sıkışması zaman aşımı" ifadesini içeren bir hata iletisi alırsanız, iş akışını elle çalıştırın. Depodaki Eylemler sekmesinde, Otomatik dağıtımı tetikle seçeneğini seçerek zaman aşımının geçici bir sorun olup olmadığını kontrol edin.
  • Bu öğreticide gösterildiği gibi kapsayıcı uygulaması için sürekli dağıtım ayarlarsanız, iş akışı dosyası (.github/workflows/<iş-akışı-adı>.yml) sizin yerinize otomatik olarak oluşturulur. Bu öğretici için bu dosyayı değiştirmeniz gerekmez. Bunu yaptıysanız değişikliklerinizi geri alın ve iş akışını deneyin.

Web sitesi ana dalda birleştirdiğiniz değişiklikleri göstermiyor

GitHub'da:

  • GitHub Actions iş akışının çalıştığını kontrol edin ve değişikliği iş akışını tetikleyen dala işlediğinizden emin olun.

Azure portalında:

  • Dalda değişiklik yaptıktan sonra zaman damgasıyla yeni bir Docker görüntüsü oluşturulup oluşturulmadığını görmek için Azure Container Registry örneğini denetleyin.

  • Bir programlama hatası olup olmadığını görmek için kapsayıcı uygulamasının günlüklerini denetleyin:

    1. Kapsayıcı uygulamasına gidin ve ardından Düzeltme Yönetimi'ne gidin. <Etkin kapsayıcı>'ya gidin. Düzeltme ayrıntıları'na gidin. Konsol günlükleri'ne gidin.
    2. Sütunların gösterilecek sırasını seçin: Saat Oluşturuldu, Stream_sve Log_s.
    3. Günlükleri en sonlara göre sıralayın ve stderr sütununda Python stdout ve iletilerini arayın. Python print çıkışı stdout mesajlardır.

Azure CLI'da:

Sürekli dağıtımı durdurmak istiyorsunuz

Sürekli dağıtımı durdurmak, kapsayıcı uygulamanızın deponuzun bağlantısını kesmek anlamına gelir.

Azure portalında:

  • Kapsayıcı uygulamasına git. Hizmet menüsünde, Sürekli dağıtım'i seçin ve ardından Bağlantıyı kesöğesini seçin.

Azure CLI'da:

Bağlantıyı kestikten sonra:

  • .github/workflows/<iş akışı adı>.yml dosyası deponuzdan kaldırılır.
  • Gizli anahtarlar depodan kaldırılmaz.
  • Azure Container Apps, GitHub hesabınız için yetkili bir OAuth uygulaması olarak kalır.
  • Azure'da, kapsayıcı, son dağıtılan kapsayıcı olarak kalır. Yeni kapsayıcı düzeltmelerinin en son görüntüyü alması için kapsayıcı uygulamasını Azure Container Registry örneğine yeniden bağlayabilirsiniz.
  • Azure'da, oluşturduğunuz ve sürekli dağıtım için kullandığınız hizmet sorumluları silinmez.

Kaynakları kaldırma

Öğretici serisiyle işiniz bittiyse ve ek maliyetler doğurmak istemiyorsanız, kullandığınız kaynakları kaldırın.

Kaynak grubunu kaldırmak gruptaki tüm kaynakları kaldırır ve kaynakları kaldırmanın en hızlı yoludur. Kaynak gruplarının nasıl kaldırılacağına ilişkin bir örnek için bkz. Kapsayıcı öğretici temizleme.

Bu öğretici üzerinde çalışmayı planlıyorsanız, uygulayabileceğiniz bazı sonraki adımlar şunlardır: