Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Azure Developer CLI (azd) mendukung provisi berlapis, yang dapat Anda gunakan untuk menentukan beberapa lapisan provisi dalam file Anda azure.yaml . Setiap lapisan menunjuk ke serangkaian templat Infrastruktur sebagai Kode (IaC) sendiri. CLI menyediakan lapisan satu per satu, diurutkan oleh dependensi di antara mereka. Anda juga dapat menyediakan atau meruntuhkan lapisan individual secara mandiri.
Fitur ini memecahkan skenario dependensi kompleks di mana sumber daya dalam satu lapisan bergantung pada sumber daya dari lapisan lain. Alih-alih mencampur IaC dengan skrip kait imperatif, provisi berlapis membuat semuanya tetap deklaratif.
Nota
Penyediaan berlapis adalah fitur beta saat ini. Pelajari selengkapnya tentang strategi penerapan versi.
Kapan menggunakan provisi berlapis
Gunakan penyediaan berlapis saat satu azd provision penyebaran tidak dapat menangani semua kebutuhan infrastruktur Anda dalam satu langkah. Pertimbangkan untuk menggunakan provisi berlapis saat:
- Dependensi melingkar: Beberapa sumber daya perlu mereferensikan sumber daya lain yang harus dibuat terlebih dahulu, seperti jaringan virtual yang harus ada sebelum titik akhir privat dapat dikonfigurasi.
- Infrastruktur dasar berbeda dari infrastruktur aplikasi: Anda mengelola jaringan bersama, keamanan, atau sumber daya identitas secara terpisah dari sumber daya per aplikasi.
- Diperlukan manajemen siklus hidup independen: Anda memperbarui dan meruntuhkan komponen infrastruktur yang berbeda pada waktu yang berbeda. Misalnya, lapisan jaringan mungkin berumur panjang, sementara lapisan aplikasi sering disebarkan ulang.
- Proyek monorepo dengan grup infrastruktur yang berbeda: Satu repositori berisi beberapa layanan independen (seperti Event Hub, Aplikasi Kontainer, dan Aplikasi Fungsi), masing-masing dengan templat infrastrukturnya sendiri.
Konfigurasikan layer dalam azure.yaml
Tetapkan lapisan-lapisan di bawah bagian infra dalam file azure.yaml Anda. Setiap lapisan memerlukan name dan path menunjuk ke direktori yang berisi templat IaC untuk lapisan tersebut.
name: my-app
infra:
layers:
- name: networking
path: ./infra/networking
- name: application
path: ./infra/application
services:
api:
project: ./src/api
language: js
host: containerapp
Penting
Urutan pemrosesan lapisan:azd provision memproses lapisan berdasarkan dependensinya. Untuk lapisan Bicep dan penyedia kustom atau ekstensi, azd menyimpulkan dependensi dengan memindai file parameter (*.bicepparam dan *.parameters.json) untuk variabel lingkungan dan referensi output lapisan, dan mengurutkan lapisan yang sesuai alih-alih secara ketat mengikuti urutan yang tercantum dalam azure.yaml. Lapisan yang tidak memiliki dependensi yang disimpulkan atau dinyatakan berjalan dalam urutan yang tercantum.
azd down mengikuti urutan terbalik yang sesuai, sehingga lapisan dependen dihapus sebelum lapisan yang mereka andalkan.
dependsOn Gunakan properti untuk mendeklarasikan pengurutan yang azd tidak dapat menyimpulkan.
Properti lapisan
Setiap lapisan mendukung properti berikut:
| Harta benda | Diperlukan | Deskripsi |
|---|---|---|
name |
Yes | Nama unik untuk lapisan. Gunakan nama ini saat menargetkan lapisan tertentu dengan perintah. |
path |
Yes | Jalur relatif ke direktori yang berisi templat IaC untuk lapisan ini. |
module |
Tidak. | Nama modul dalam direktori lapisan. Secara default menjadi main. |
provider |
Tidak. | Penyedia IaC untuk lapisan ini (bicep atau terraform). Mewarisi dari akar infra.provider jika Anda tidak menentukannya. |
dependsOn |
Tidak. | Nama lapisan lain yang bergantung pada lapisan ini. Gunakan properti ini ketika urutan penting, tetapi azd tidak dapat menentukan ketergantungan dari referensi parameter. |
Penting
Saat Anda menentukan infra.layers, Anda tidak dapat mendeklarasikan properti lain di infra bagian (path, module, deploymentStacks) di tingkat akar. Anda harus menentukan semua konfigurasi infrastruktur dalam setiap lapisan.
Struktur direktori
Proyek umum yang menggunakan provisi berlapis mungkin memiliki struktur direktori berikut:
my-app/
├── azure.yaml
├── infra/
│ ├── networking/
│ │ └── main.bicep
│ └── application/
│ └── main.bicep
└── src/
└── api/
└── ...
Setiap direktori lapisan berisi serangkaian templat IaC lengkapnya sendiri, sama seperti direktori proyek azd standarinfra.
Pengadaan dan mengelola lapisan
Anda dapat menyediakan semua lapisan sekaligus atau menargetkan lapisan tertentu berdasarkan nama. Bagian berikut menjelaskan perintah umum untuk penyediaan, pembongkaran, dan penyegaran kondisi lapisan.
Memprovisikan semua lapisan
Jalankan azd provision tanpa argumen untuk menyediakan semua lapisan:
azd provision
azd memproses setiap lapisan satu per satu, memastikan bahwa lapisan selesai sebelum lapisan apa pun yang bergantung padanya dimulai. Untuk lapisan Bicep dan penyedia kustom atau ekstensi, azd menyimpulkan dependensi dari variabel lingkungan dan referensi output lapisan dalam *.bicepparam file dan *.parameters.json , sehingga urutan eksekusi dapat berbeda dari urutan yang tercantum dalam azure.yaml. Lapisan tanpa dependensi yang disimpulkan atau dinyatakan berjalan dalam urutan yang tercantum. Proses ini menjamin bahwa sumber daya dependen ada sebelum lapisan yang mereferensikannya disebarkan.
Memprovisikan lapisan tertentu
Untuk memprovisikan hanya lapisan tertentu, berikan nama lapisan sebagai argumen:
azd provision networking
Perintah ini hanya menyebarkan sumber daya yang ditentukan dalam networking lapisan. Penyediaan lapisan tertentu berguna saat:
- Anda melakukan iterasi pada satu lapisan selama pengembangan.
- Anda perlu memperbarui satu lapisan tanpa menyebarkan ulang lapisan lain.
- Anda sedang menyiapkan lapisan baru di atas infrastruktur yang ada.
Merobek semua lapisan
Jalankan azd down tanpa argumen untuk menghapus sumber daya dari semua lapisan. Ketika beberapa lapisan ada, azd memprosesnya secara terbalik dari urutan provisi, sehingga sumber daya dependen dihapus sebelum sumber daya dasar bergantung pada:
azd down
Merobek lapisan tertentu
Untuk merobek lapisan tertentu saja, teruskan nama lapisan sebagai argumen:
azd down application
Perintah ini hanya menghapus sumber daya yang disebarkan oleh application lapisan, membiarkan lapisan lain tetap utuh.
Merefresh kondisi lingkungan sistem
Anda dapat menyegarkan status lingkungan dari lapisan tertentu dengan menggunakan --layer flag dengan azd env refresh:
azd env refresh --layer networking
Perintah ini memperbarui variabel dan output lingkungan berdasarkan penyebaran terbaru dari lapisan yang ditentukan.
Contoh: Monorepo dengan beberapa layanan
Contoh berikut menunjukkan provisi berlapis untuk monorepo yang berisi Event Hub, Aplikasi Kontainer yang menjalankan beberapa kontainer, dan Aplikasi Fungsi Azure:
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}
Struktur direktori yang sesuai:
logging-app/
├── azure.yaml
├── infra/
│ ├── eventhub/
│ │ └── main.bicep
│ ├── aca/
│ │ └── main.bicep
│ └── functionapp/
│ └── main.bicep
└── src/
└── function/
└── functionapp.csproj
Dengan konfigurasi ini, Anda dapat:
- Hanya sediakan infrastruktur Event Hub:
azd provision eventhub - Sediakan hanya infrastruktur Kontainer Aplikasi:
azd provision aca - Sediakan semuanya secara tertata:
azd provision - Membongkar hanya lapisan Function App:
azd down functionapp
Contoh: Lapisan dasar dan aplikasi
Pola umum memisahkan infrastruktur bersama atau dasar dari infrastruktur per aplikasi:
name: my-app
infra:
layers:
- name: base
path: ./infra/base
- name: app
path: ./infra/app
services:
web:
project: ./src/web
language: js
host: containerapp
Lapisan ini base membuat sumber daya bersama seperti jaringan, identitas, dan pemantauan. Lapisan app membuat sumber daya khusus aplikasi (seperti lingkungan Aplikasi Kontainer dan aplikasi kontainer) yang mereferensikan sumber daya dasar.
Selama pengembangan, Anda dapat memprovisikan lapisan dasar sekali dan melakukan iterasi pada lapisan aplikasi:
azd provision base
azd provision app
azd provision app # re-provision only the app layer after changes
Contoh: Penyedia IaC campuran
Setiap lapisan dapat menggunakan penyedia IaC yang berbeda. Misalnya, Anda dapat menggunakan Bicep untuk jaringan dan Terraform untuk lapisan aplikasi:
name: my-app
infra:
layers:
- name: networking
path: ./infra/networking
provider: bicep
- name: application
path: ./infra/application
provider: terraform
Penyedia bawaan non-Bicep (Terraform, Pulumi, ARM, dan penyedia pengujian) tidak transparan bagi inferensi dependensi, karena azd tidak dapat menganalisis inputnya untuk mendeteksi referensi ke lapisan lain. Gunakan properti eksplisit dependsOn setiap kali urutan di antara lapisan-lapisan tersebut, atau di antara lapisan-lapisan tersebut dan lapisan lainnya, penting:
name: my-app
infra:
layers:
- name: networking
path: ./infra/networking
provider: bicep
- name: application
path: ./infra/application
provider: terraform
dependsOn:
- networking
Pertimbangan dan keterbatasan
- Saat Anda menyediakan semua lapisan,
azdmemprosesnya satu per satu berdasarkan dependensinya. Untuk lapisan Bicep dan penyedia kustom atau ekstensi,azdmenentukan dependensi dari variabel lingkungan dan referensi output lapisan dalam file*.bicepparamdan*.parameters.json. Lapisan tanpa dependensi yang disimpulkan atau dinyatakan berjalan dalam urutan yang Anda tentukan. - Penyedia non-Bicep bawaan (Terraform, Pulumi, ARM, dan penyedia pengujian) tidak transparan untuk inferensi dependensi. Gunakan properti eksplisit
dependsOnjika urutan yang melibatkan lapisan tersebut penting. - Pernyataan eksplisit
dependsOnjuga diperlukan saat urutan penting tetapiazdtidak dapat menyimpulkan dependensi dari referensi parameter. Misalnya, gunakandependsOnketika kait satu lapisanpostprovisionmenghasilkan nilai yang digunakan lapisan lain, karena nilai yang dihasilkan kait tidak muncul sebagai referensi output dalam*.bicepparamatau*.parameters.jsonfile. - Saat Anda membongkar semua lapisan,
azdmemprosesnya dalam urutan kebalikan dari urutan provisi.- Jika beberapa lapisan menyebarkan sumber daya ke dalam grup sumber daya Azure yang sama dan Anda menggunakan perilaku penghapusan berbasis grup sumber daya default, sumber daya bersama dapat dihapus saat menjalankan azd down.
- Untuk memungkinkan pelacakan dan penghapusan setiap lapisan infrastruktur secara independen, aktifkan stack deployment dengan menjalankan perintah
azd config set alpha.deployment.stacks on.
- Anda tidak dapat menggunakan
--previewbendera saat menyediakan beberapa lapisan sekaligus. Tentukan nama<layer>untuk menggunakan mode pratinjau. - Lapisan beroperasi secara independen dalam hal IaC. Untuk mereferensikan output dari satu lapisan di lapisan lain, gunakan variabel lingkungan yang
azddiatur setelah setiap penyebaran lapisan. Mereferensikan variabel lingkungan tersebut dari*.bicepparamfile atau*.parameters.jsonjuga memungkinkanazdmenyimpulkan pengurutan di antara lapisan. - Semua fitur provisi standar
azd(penyimpanan sementara status penyebaran, hook, parameter, Bicep, atau Terraform) berfungsi di setiap lapisan secara individu.- Kait tingkat perintah (misalnya, ,
preprovisionpostprovision) dipanggil sekali per lapisan. Ketika beberapa lapisan didefinisikan, kait dijalankan untuk setiap lapisan sesuai dengan urutan pemrosesan lapisan tersebut.
- Kait tingkat perintah (misalnya, ,
Langkah selanjutnya
referensi skema azure.yaml