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.
Petunjuk / Saran
Konten ini adalah kutipan dari eBook, Merancang Aplikasi .NET Cloud Native untuk Azure, tersedia di .NET Docs atau sebagai PDF gratis yang dapat diunduh yang dapat dibaca secara offline.
Sistem cloud-native merangkul layanan mikro, kontainer, dan desain sistem modern untuk mencapai kecepatan dan kelincahan. Mereka menyediakan tahap build dan rilis otomatis untuk memastikan kode yang konsisten dan berkualitas. Tapi, itu hanya bagian dari cerita. Bagaimana Anda menyediakan lingkungan cloud tempat sistem ini berjalan?
Aplikasi cloud-native modern merangkul praktik Infrastruktur sebagai Kode yang diterima secara luas, atau IaC. Dengan IaC, Anda mengotomatiskan penyediaan platform. Anda pada dasarnya menerapkan praktik rekayasa perangkat lunak seperti pengujian dan penerapan versi ke praktik DevOps Anda. Infrastruktur dan penyebaran Anda otomatis, konsisten, dan dapat diulang. Sama seperti pengiriman berkelanjutan yang mengotomatiskan model penyebaran manual tradisional, Infrastructure as Code (IaC) mengembangkan cara lingkungan aplikasi dikelola.
Alat seperti Azure Resource Manager (ARM), Terraform, dan Azure Command Line Interface (CLI) memungkinkan Anda membuat skrip infrastruktur cloud yang Anda butuhkan secara deklaratif.
Template Manajer Sumber Daya Azure
ARM adalah singkatan dari Azure Resource Manager. Ini adalah mesin provisi API yang dibangun ke dalam Azure dan diekspos sebagai layanan API. ARM memungkinkan Anda menyebarkan, memperbarui, menghapus, dan mengelola sumber daya yang terkandung dalam grup sumber daya Azure dalam satu operasi terkoordinasi. Anda menyediakan mesin dengan templat berbasis JSON yang menentukan sumber daya yang Anda butuhkan dan konfigurasinya. ARM secara otomatis mengatur penyebaran dalam urutan yang benar yang menghormati dependensi. Mesin memastikan sifat idempotensi. Jika sumber daya yang diinginkan sudah ada dengan konfigurasi yang sama, provisi akan diabaikan.
Templat Azure Resource Manager adalah bahasa berbasis JSON untuk menentukan berbagai sumber daya di Azure. Skema dasar terlihat seperti Gambar 10-14.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "",
"apiProfile": "",
"parameters": { },
"variables": { },
"functions": [ ],
"resources": [ ],
"outputs": { }
}
Gambar 10-14 - Skema untuk templat Resource Manager
Dalam templat ini, seseorang mungkin menentukan kontainer penyimpanan di dalam bagian sumber daya seperti:
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"apiVersion": "2018-07-01",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {}
}
],
Gambar 10-15 - Contoh akun penyimpanan yang ditentukan dalam templat Resource Manager
Templat ARM dapat diparameterkan dengan lingkungan dinamis dan informasi konfigurasi. Melakukannya memungkinkannya digunakan kembali untuk menentukan lingkungan yang berbeda, seperti pengembangan, QA, atau produksi. Biasanya, templat membuat semua sumber daya dalam satu grup sumber daya Azure. Dimungkinkan untuk menentukan beberapa grup sumber daya dalam satu templat Resource Manager, jika diperlukan. Anda dapat menghapus semua sumber daya di lingkungan dengan menghapus grup sumber daya itu sendiri. Analisis biaya juga dapat dilakukan di tingkat grup sumber daya, memungkinkan dengan cepat mengetahui biaya setiap lingkungan.
Ada banyak contoh templat ARM yang tersedia di proyek Templat Mulai Cepat Azure di GitHub. Mereka dapat membantu mempercepat pembuatan templat baru atau memodifikasi templat yang sudah ada.
Templat Resource Manager dapat dijalankan dalam banyak cara. Mungkin cara paling sederhana adalah dengan hanya menempelkannya ke portal Microsoft Azure. Untuk penyebaran eksperimental, metode ini bisa cepat. Mereka juga dapat dijalankan sebagai bagian dari proses build atau rilis di Azure DevOps. Ada tugas yang akan memanfaatkan koneksi ke Azure untuk menjalankan templat. Perubahan pada templat Resource Manager diterapkan secara bertahap, yang berarti bahwa untuk menambahkan sumber daya baru memerlukan hanya menambahkannya ke templat. Alat ini akan mendamaikan perbedaan antara sumber daya saat ini dan yang ditentukan dalam templat. Sumber daya kemudian akan dibuat atau diubah sehingga cocok dengan apa yang ditentukan dalam templat.
Terraform
Aplikasi cloud-native sering dibangun menjadi cloud agnostic. Dengan demikian, aplikasi tidak digabungkan dengan erat ke vendor cloud tertentu dan dapat disebarkan ke cloud publik apa pun.
Terraform adalah alat templat komersial yang dapat menyediakan aplikasi cloud-native di semua pemain cloud utama: Azure, Google Cloud Platform, AWS, dan AliCloud. Alih-alih menggunakan JSON sebagai bahasa definisi templat, ia menggunakan HCL yang sedikit lebih terse (Hashicorp Configuration Language).
Contoh file Terraform yang melakukan hal yang sama dengan templat Resource Manager sebelumnya (Gambar 10-15) ditampilkan dalam Gambar 10-16:
provider "azurerm" {
version = "=1.28.0"
}
resource "azurerm_resource_group" "testrg" {
name = "production"
location = "West US"
}
resource "azurerm_storage_account" "testsa" {
name = "${var.storageAccountName}"
resource_group_name = "${azurerm_resource_group.testrg.name}"
location = "${var.region}"
account_tier = "${var.tier}"
account_replication_type = "${var.replicationType}"
}
Gambar 10-16 - Contoh templat Resource Manager
Terraform juga menyediakan pesan kesalahan intuitif untuk templat masalah. Ada juga tugas validasi berguna yang dapat digunakan dalam fase build untuk menangkap kesalahan templat lebih awal.
Seperti halnya templat Resource Manager, alat baris perintah tersedia untuk menyebarkan templat Terraform. Ada juga tugas yang dibuat komunitas di Azure Pipelines yang dapat memvalidasi dan menerapkan templat Terraform.
Terkadang templat Terraform dan ARM menghasilkan nilai yang bermakna, seperti string koneksi ke database yang baru dibuat. Informasi ini dapat diambil dalam alur build dan digunakan dalam tugas berikutnya.
Skrip dan Tugas Azure CLI
Terakhir, Anda dapat memanfaatkan Azure CLI untuk secara deklaratif membuat skrip infrastruktur cloud Anda. Skrip Azure CLI dapat dibuat, ditemukan, dan dibagikan untuk menyediakan dan mengonfigurasi hampir semua sumber daya Azure. CLI mudah digunakan dengan kurva pembelajaran yang lembut. Skrip dijalankan dalam PowerShell atau Bash. Mereka juga mudah untuk debug, terutama jika dibandingkan dengan templat ARM.
Skrip Azure CLI berfungsi dengan baik saat Anda perlu meruntuhkan dan menyebarkan ulang infrastruktur Anda. Memperbarui lingkungan yang ada bisa menjadi sulit. Banyak perintah CLI tidak idempotensi. Itu berarti mereka akan membuat ulang sumber daya setiap kali dijalankan, bahkan jika sumber daya sudah ada. Selalu dimungkinkan untuk menambahkan kode yang memeriksa keberadaan setiap sumber daya sebelum membuatnya. Namun, melakukannya, skrip Anda bisa menjadi kembung dan sulit dikelola.
Skrip ini juga dapat disematkan dalam alur Azure DevOps sebagai Azure CLI tasks. Mengeksekusi alur kerja memanggil skrip.
Gambar 10-17 memperlihatkan cuplikan YAML yang mencantumkan versi Azure CLI dan detail langganan. Perhatikan bagaimana perintah Azure CLI disertakan dalam skrip sebaris.
- task: AzureCLI@2
displayName: Azure CLI
inputs:
azureSubscription: <Name of the Azure Resource Manager service connection>
scriptType: ps
scriptLocation: inlineScript
inlineScript: |
az --version
az account show
Gambar 10-17 - Skrip Azure CLI
Dalam artikel, Apa itu Infrastruktur sebagai Kode, Penulis Sam Guckenheimer menjelaskan caranya, "Teams yang menerapkan IaC dapat memberikan lingkungan yang stabil dengan cepat dan dalam skala besar. Teams menghindari konfigurasi lingkungan manual dan menerapkan konsistensi dengan mewakili status lingkungan yang diinginkan melalui kode. Penyebaran infrastruktur dengan IaC dapat diulang dan mencegah masalah runtime yang disebabkan oleh penyimpangan konfigurasi atau dependensi yang hilang. Tim DevOps dapat bekerja sama dengan serangkaian praktik dan alat terpadu untuk mengirimkan aplikasi dan infrastruktur pendukungnya dengan cepat, andal, dan dalam skala besar."