Katmanlı sağlama

Azure Geliştirici CLI'sı (azd), dosyanızda azure.yaml birden çok sağlama katmanı tanımlamak için kullanabileceğiniz katmanlı sağlamayı destekler. Her katman kendi Kod Olarak Altyapı (IaC) şablonları kümesine işaret eder. CLI, katmanları sizin tanımladığınız sırayla sıralı olarak sağlar. Ayrıca tek tek katmanları bağımsız olarak sağlayabilir veya yok edebilirsiniz.

Bu özellik, bir katmandaki kaynakların başka bir katmandaki kaynaklara bağımlı olduğu karmaşık bağımlılık senaryolarını çözer. IaC'yi zorlayıcı kanca betikleriyle karıştırmak yerine, katmanlı sağlama her şeyi deklaratif şekilde tutar.

Uyarı

Katmanlı temin şu anda beta aşamasında bulunan bir özelliktir. Sürüm oluşturma stratejisi hakkında daha fazla bilgi edinin.

Katmanlı sağlama ne zaman kullanılır?

Tek azd provision bir dağıtım tüm altyapı gereksinimlerinizi tek adımda karşılayamazsa katmanlı sağlamayı kullanın. Aşağıdaki durumlarda katmanlı sağlamayı kullanmayı göz önünde bulundurun:

  • Döngüsel bağımlılıklar: Bazı kaynakların, özel uç noktanın yapılandırılabilmesi için önce var olması gereken bir sanal ağ gibi, önce oluşturulması gereken diğer kaynaklara başvurması gerekir.
  • Temel altyapı, uygulama altyapısından farklıdır: Paylaşılan ağ, güvenlik veya kimlik kaynaklarını uygulama başına kaynaklardan ayrı olarak yönetirsiniz.
  • Bağımsız yaşam döngüsü yönetimi gereklidir: Farklı altyapı bileşenlerini farklı zamanlarda güncelleştirip yok edebilirsiniz. Örneğin, bir uygulama katmanı sık sık yeniden dağıtılırken ağ katmanı uzun ömürlü olabilir.
  • Ayrı altyapı gruplarına sahip monorepo projeleri: Tek bir depo, her biri kendi altyapı şablonlarına sahip birden çok bağımsız hizmet (Olay Hub'ı, Kapsayıcı Uygulaması ve İşlev Uygulaması gibi) içerir.

azure.yaml'de katmanları yapılandırma

Dosyanızın infra bölümünün altında azure.yaml katmanlar tanımlayın. Her katman için name bir ve bu katman için IaC şablonlarını içeren dizine işaret eden bir path gerekir.

name: my-app
infra:
  layers:
    - name: networking
      path: ./infra/networking
    - name: application
      path: ./infra/application
services:
  api:
    project: ./src/api
    language: js
    host: containerapp

Önemli

Katman işleme sırası:azd provision katmanlarını içinde listelendikleri sırayla azure.yaml doğru işler. azd down katmanları ters sırada işler (alttan üste). İlk olarak temel kaynakların, ardından bunlara bağlı olan katmanların gösterilmesi için katmanlarınızı tanımlayın. Bu sıra, ihtiyaç duyan kaynaklardan önce bağımlılıklar oluşturmanızı ve bu kaynaklardan sonra bağımlılıkları kaldırmanızı sağlar.

Katman özellikleri

Her katman aşağıdaki özellikleri destekler:

Mülkiyet Gerekli Description
name Evet Katman için benzersiz bir ad. Komutlarla belirli bir katmanı hedeflerken bu adı kullanın.
path Evet Bu katman için IaC şablonlarını içeren dizinin göreli yolu.
module Hayı Katmanın dizinindeki modülün adı. Varsayılan olarak main değerini alır.
provider Hayı Bu katman için IaC sağlayıcısı (bicep veya terraform). Belirtmezseniz kökten infra.provider devralır.

Önemli

Tanımladığınızda infra.layers, kök düzeyinde infra bölümü üzerinde diğer özellikleri (path, module, deploymentStacks) bildiremezsiniz. Her katmandaki tüm altyapı yapılandırmasını belirtmeniz gerekir.

Dizin yapısı

Katmanlı sağlama kullanan tipik bir proje aşağıdaki dizin yapısına sahip olabilir:

my-app/
├── azure.yaml
├── infra/
│   ├── networking/
│   │   └── main.bicep
│   └── application/
│       └── main.bicep
└── src/
    └── api/
        └── ...

Her katman dizini, standart azd bir projenin infra dizininde olduğu gibi kendi eksiksiz IaC şablonları kümesini içerir.

Katmanları sağlama ve yönetme

Tüm katmanları aynı anda sağlayabilir veya belirli bir katmanı ada göre hedefleyebilirsiniz. Aşağıdaki bölümlerde katman durumunu sağlama, kaldırma ve yenilemeye yönelik yaygın komutlar açıklanmaktadır.

Tüm katmanları sağlama

Bağımsız değişken olmadan çalıştırarak, azd provision içinde tanımlandığı sırayla tüm katmanları sağlamak için azure.yaml.

azd provision

azd her katmanı birer birer işler ve ikinci katman başlamadan önce ilk katmanın tamamlanmasını sağlar. Bu süreç, bağımlı kaynakların, bunlara başvuran katmanlar dağıtılmadan önce mevcut olduğunu garanti eder.

Belirli bir katmanı sağlama

Yalnızca belirli bir katmanı sağlamak için, katman adını parametre olarak geçirin.

azd provision networking

Bu komut yalnızca katmanda networking tanımlanan kaynakları dağıtır. Belirli bir katmanı sağlamak aşağıdaki durumlarda kullanışlıdır:

  • Geliştirme sırasında tek bir katmanda yineleme yapıyorsun.
  • Başkalarını yeniden dağıtmadan bir katmanı güncelleştirmeniz gerekir.
  • Mevcut altyapının üzerine yeni bir katman ayarlıyorsunuz.

Tüm katmanları yırtın

Kaynakları tüm katmanlardan kaldırmak için bağımsız değişken olmadan komutunu çalıştırın azd down . Birden çok katman azd mevcut olduğunda, bunları ters sırada işler, bu sayede bağımlı kaynaklar, üzerinde bağlı oldukları temel kaynaklardan önce kaldırılır.

azd down

Belirli bir katmanı sökme

Belirli bir katmanı kaldırmak için katman adını parametre olarak geçirin:

azd down application

Bu komut yalnızca katman tarafından application dağıtılan kaynakları kaldırır ve diğer katmanları olduğu gibi bırakır.

Ortam durumunu yenileme

--layer bayrağını kullanarak azd env refresh ile ortam durumunu belirli bir katmandan yenileyebilirsiniz.

azd env refresh --layer networking

Bu komut, ortam değişkenlerini ve çıkışlarını belirtilen katmanın en son dağıtımına göre güncelleştirir.

Birden çok hizmet içeren bir monorepo örneği

Aşağıdaki örnekte Event Hub, birden çok kapsayıcı çalıştıran bir Container App ve Azure Function App içeren bir monorepo için katmanlı sağlama gösterilmektedir:

name: logging-app
infra:
  layers:
    - name: eventhub
      path: ./infra/eventhub
    - name: aca
      path: ./infra/aca
    - name: functionapp
      path: ./infra/functionapp
services:
  functionapp:
    resourceName: ${site_name}
    language: dotnet
    project: ./src/function/functionapp.csproj
    host: appservice
    resourceGroup: ${rg_name}

karşılık gelen dizin yapısı:

logging-app/
├── azure.yaml
├── infra/
│   ├── eventhub/
│   │   └── main.bicep
│   ├── aca/
│   │   └── main.bicep
│   └── functionapp/
│       └── main.bicep
└── src/
    └── function/
        └── functionapp.csproj

Bu yapılandırmayla şunları yapabilirsiniz:

  1. Yalnızca Event Hub altyapısını sağlayın: azd provision eventhub
  2. Yalnızca Container App altyapısını sağlayın: azd provision aca
  3. Her şeyi sırayla sağlayın: azd provision
  4. Yalnızca İşlev Uygulaması katmanını yırtın: azd down functionapp

Örnek: Temel ve uygulama katmanları

Ortak bir desen, paylaşılan veya temel altyapıyı uygulama başına altyapıdan ayırır:

name: my-app
infra:
  layers:
    - name: base
      path: ./infra/base
    - name: app
      path: ./infra/app
services:
  web:
    project: ./src/web
    language: js
    host: containerapp

Katman base ağ, kimlik ve izleme gibi paylaşılan kaynaklar oluşturur. Katman, app temel kaynaklara başvuran uygulamaya özgü kaynakları (Kapsayıcı Uygulaması ortamı ve kapsayıcı uygulamaları gibi) oluşturur.

Geliştirme sırasında temel katmanı bir kez sağlayıp uygulama katmanında yineleyebilirsiniz:

azd provision base
azd provision app
azd provision app  # re-provision only the app layer after changes

Örnek: Karma IaC sağlayıcıları

Her katman farklı bir IaC sağlayıcısı kullanabilir. Örneğin, ağ için Bicep ve uygulama katmanı için Terraform kullanabilirsiniz:

name: my-app
infra:
  layers:
    - name: networking
      path: ./infra/networking
      provider: bicep
    - name: application
      path: ./infra/application
      provider: terraform

Dikkat edilmesi gerekenler ve sınırlamalar

  • Tüm katmanları sağlarken, azd bunları tanımladığınız sırayla sıralı olarak işler. İlk olarak temel kaynakların sağlanması için katman siparişinizi planlayın.
  • Tüm katmanları yıktığınızda, azd bunları ters sırada işler.
    • Birden çok katman kaynakları aynı Azure kaynak grubuna dağıtırsa ve varsayılan kaynak grubu tabanlı silme davranışını kullanırsanız, azd down çalıştırılırken paylaşılan kaynaklar silinebilir.
    • Katmanlı altyapının bağımsız olarak izlenmesine ve silinmesine izin vermek için Dağıtım yığınları komutunu azd config set alpha.deployment.stacks on kullanarak dağıtım yığınlarını etkinleştirin, azd'in yalnızca kaynak grubu silmeye güvenmek yerine katman başına kaynakları izlemesine olanak tanır.
  • Birden çok katman aynı anda sağlanırken --preview bayrağını kullanamazsınız. Önizleme modunu kullanmak için bir <layer> ad belirtin.
  • Katmanlar IaC açısından bağımsız olarak çalışır. Bir katmanın çıktısına başka bir katmanda başvurmak için, her katmanın dağıtımından sonra ayarlanan azd ortam değişkenlerini kullanın.
  • Tüm standart azd sağlama özellikleri (dağıtım durumu önbelleğe alma, kancalar, parametreler, Bicep veya Terraform) her bir katmanda çalışır.
    • Komut düzeyi kancaları (örneğin, preprovision, postprovision) katman başına bir kez çağrılır. Birden çok katman tanımlandığında, katmanlar işlenirken her katman için kancalar çalıştırılır.

Sonraki Adımlar