Apa itu infrastruktur sebagai kode?
Mengevaluasi apakah infrastruktur sebagai kode mungkin merupakan pendekatan berharga untuk provisi sumber daya di perusahaan Anda. Anda sedang meninjau opsi penyebaran yang tersedia, termasuk:
- Portal Azure
- Azure CLI
- Azure PowerShell
- Templat Azure Resource Manager (JSON dan Bicep)
- Terraform
Anda sedang mencari opsi yang dapat digunakan secara terus-menerus dan perlu memutuskan teknologi mana yang akan digunakan untuk menyebarkan infrastruktur Azure Anda.
Unit ini mencakup mengapa infrastruktur sebagai kode dapat membantu Anda menyebarkan infrastruktur Azure dengan cara otomatis dan dapat diulang.
Perintah Azure CLI digunakan untuk mengilustrasikan konsep. Unit ini mencakup penggunaan perintah untuk menyebarkan sumber daya di modul lain dari jalur pembelajaran Terraform.
Mendefinisikan infrastruktur sebagai kode
Perusahaan Anda merancang mainan baru untuk dirilis ke pasar dan sebagian besar mainan baru perlu dirakit terlebih dahulu setelah dibeli. Tim desain perusahaan membuat manual petunjuk perakitan yang akan disertakan dalam setiap mainan. Setiap manual menyediakan rincian cara merakit mainan dengan benar.
Anda dapat menganggap infrastruktur sebagai kode seperti manual petunjuk untuk infrastruktur Anda. Manual ini memiliki rincian konfigurasi akhir untuk sumber daya Anda dan langkah-langkah untuk mencapai status konfigurasi tersebut.
Infrastruktur sebagai kode adalah proses mengotomatiskan penyediaan infrastruktur Anda. Ini menggunakan bahasa pengkodean deklaratif dan sistem penerapan versi yang mirip dengan apa yang digunakan untuk kode sumber. Saat Anda membuat aplikasi, kode sumber Anda menghasilkan hasil yang sama pada setiap kompilasi. Dengan cara yang sama, penyebaran infrastruktur sebagai kode dilakukan secara otomatis, konsisten, dan dapat diulang. Infrastruktur sebagai kode dapat mengotomatiskan penyebaran sumber daya Anda. Seperti jaringan virtual, komputer virtual, aplikasi, penyimpanan, dan bahkan repositori GitHub atau akun pengguna.
Jika Anda mengingat instruksi manual untuk mainan baru, ada beberapa cara untuk menulis instruksi manual. Salah satu opsinya adalah dengan menjelaskan rincian setiap langkah dari proses perakitan. Pilihan yang lain adalah dengan menunjukkan tampilan terperinci dari potongan serta bagian yang diperlukan untuk merakit mainan tersebut. Unit ini mencakup perbedaan antara kode imperatif dan deklaratif dan bagaimana mereka berhubungan dengan manual instruksi perusahaan Anda.
Mengapa menggunakan infrastruktur sebagai kode?
Menggunakan pendekatan infrastruktur sebagai kode menawarkan banyak keuntungan untuk provisi sumber daya. Dengan infrastruktur sebagai kode, Anda dapat:
- Tingkatkan keyakinan dalam penerapan Anda.
- Mengelola beberapa lingkungan.
- Memahami sumber daya cloud Anda dengan lebih baik.
Meningkatkan keyakinan
Salah satu keuntungan menggunakan infrastruktur sebagai kode adalah tingkat keyakinan yang Anda peroleh dalam penyebaran dari peningkatan konsistensi dan keamanan.
Integrasi dengan proses saat ini: Jika organisasi Anda sudah menggunakan praktik pengembangan perangkat lunak standar, Anda dapat mengadopsi proses yang sama untuk penyebaran infrastruktur Anda. Misalnya, tinjauan serekan dan analisis statis dapat membantu mendeteksi masalah dalam konfigurasi yang mungkin sulit dideteksi saat membuat perubahan manual.
Konsistensi: Mengadopsi pendekatan infrastruktur sebagai kode membantu tim Anda untuk mengikuti proses yang benar untuk menyebarkan infrastruktur. Dengan mengikuti proses tersebut, tanggung jawab bergeser dari sekelompok kecil individu ke proses dan alat yang bersifat otomatis. Infrastruktur sebagai kode membantu mengurangi kesalahan manusia dalam provisi sumber daya dan memastikan penyebaran yang konsisten.
Pemindaian otomatis: Infrastruktur sebagai pemindaian kode dengan pemeriksaan alat otomatis untuk kesalahan dalam kode. Alat otomatis juga dapat meninjau perubahan yang diusulkan untuk memastikan bahwa praktik keamanan dan performa diikuti.
Manajemen rahasia: Banyak solusi memerlukan rahasia, seperti string koneksi, kunci enkripsi, rahasia klien, dan sertifikat. Di Azure, Azure Key Vault adalah layanan yang digunakan untuk menyimpan rahasia ini dengan aman. Banyak alat infrastruktur sebagai kode dapat diintegrasikan dengan Key Vault untuk mengakses rahasia ini dengan aman pada waktu penyebaran. Atau yang lebih baik lagi, hilangkan rahasia sama sekali dengan menggunakan Federasi Identitas Beban Kerja dan Identitas Terkelola.
Kontrol akses: Dengan penyebaran infrastruktur sebagai kode, Anda memiliki opsi untuk menggunakan identitas terkelola atau akun layanan untuk mengotomatiskan provisi sumber daya. Memblokir akses pengguna mencegah konfigurasi yang salah disebarkan ke produksi. Jika perlu, Anda dapat mengambil alih proses ini dengan menggunakan akun akses darurat (sering disebut akun break glass) atau dengan menggunakan fitur Microsoft Entra ID Privileged Identity Management.
Hindari penyimpangan konfigurasi: Idempotence adalah istilah yang terkait dengan infrastruktur sebagai kode. Ketika operasi bersifat idempoten, itu berarti memberikan hasil yang sama pada setiap pengulangan. Jika Anda memilih peralatan yang menggunakan operasi idempoten, Anda dapat menghindari penyimpangan konfigurasi.
Sebagai contoh idempotensi, pertimbangkan perintah Azure CLI berikut. Perintah membuat grup sumber daya Azure bernama storage-resource-group
di wilayah US Timur.
az group create \
--name storage-resource-group \
--location eastus
Jika Anda menjalankan perintah ini sekali lagi, Anda menerima output yang sama persis karena perintah Azure CLI ini dirancang untuk menjadi idempoten. Anda tidak menerima kesalahan atau grup sumber daya duplikat.
Saat Anda menggunakan infrastruktur sebagai kode, Anda dapat menyebarkan kembali lingkungan Anda di setiap rilis solusi Anda. Rilis tersebut mungkin menggabungkan perubahan konfigurasi kecil atau bahkan pembaruan yang signifikan. Proses ini membantu menghindari penyimpangan konfigurasi. Jika perubahan yang tidak disengaja dilakukan pada suatu sumber daya, perubahan tersebut dapat diperbaiki dengan menyebarkan konfigurasi kembali. Dengan mengikuti pendekatan ini, Anda mendokumentasikan lingkungan Anda dengan menggunakan kode.
Mengelola banyak lingkungan
Banyak organisasi memelihara banyak lingkungan aplikasi. Pengembang di perusahaan mainan Anda mungkin memiliki beberapa versi kode aplikasi yang ditahapkan di repositori untuk dirilis ke lingkungan yang berbeda. Lingkungan tersebut mungkin termasuk pengembangan, pengujian, dan produksi. Beberapa organisasi memelihara banyak lingkungan produksi untuk aplikasi yang didistribusikan secara global. Organisasi lain, seperti vendor perangkat lunak independen (ISV), mempertahankan beberapa lingkungan penyewa untuk pelanggan mereka.
Berikut adalah beberapa cara utama infrastruktur sebagai kode dapat membantu Anda mengelola lingkungan:
Menentukan lingkungan baru: Salah satu keuntungan utama komputasi cloud adalah kemampuannya untuk melakukan penskalaan. Infrastruktur sebagai kode dapat membantu Anda menskalakan ke banyak instans aplikasi Anda. Instans tersebut dapat membantu saat beban ditingkatkan atau Anda dapat menyebarkannya untuk pengguna di area lainnya di dunia. Fleksibilitas ini juga dapat bermanfaat ketika Anda menguji aplikasi Anda, seperti selama uji penetrasi, pengujian beban, dan pengujian bug. Dengan basis kode yang didefinisikan dengan baik, Anda dapat secara dinamis menentukan lingkungan baru ini dengan konsisten.
Lingkungan nonproduksi: Masalah umum yang dihadapi organisasi adalah diferensiasi antara lingkungan produksi dan nonproduksi. Saat Anda memprovisikan sumber daya secara manual di lingkungan terpisah, ada kemungkinan konfigurasi akhir tidak cocok. Contohnya adalah ketika Anda menyebarkan fitur baru ke lingkungan nonproduksi yang berbeda dari lingkungan produksi. Ada kemungkinan bahwa fitur baru tidak berfungsi seperti yang diharapkan di lingkungan produksi karena perbedaan antara kedua lingkungan. Menggunakan infrastruktur sebagai kode dapat membantu meminimalisir terjadinya masalah ini. Anda dapat menggunakan file konfigurasi yang sama untuk setiap lingkungan tetapi menyediakan parameter input yang berbeda untuk menciptakan keunikan. Anda juga dapat hemat biaya dengan merobohkan lingkungan nonproduksi saat tidak digunakan.
Pemulihan dari bencana: Dalam beberapa situasi, infrastruktur sebagai kode dapat digunakan sebagai bagian dari rencana pemulihan dari bencana milik suatu organisasi. Misalnya, Anda mungkin perlu membuat ulang lingkungan Anda di wilayah lain karena pemadaman layanan. Dengan menggunakan infrastruktur sebagai kode, Anda dapat dengan cepat menentukan instans baru untuk proses failover alih-alih menyebarkan dan mengonfigurasi ulang semuanya secara manual.
Memahami sumber daya cloud Anda dengan lebih baik
Infrastruktur sebagai kode dapat membantu Anda lebih memahami status sumber daya cloud Anda:
Lintasan audit: Perubahan pada konfigurasi infrastruktur sebagai kode Anda dikelola dalam versi dengan cara yang sama seperti kode sumber aplikasi Anda. Perubahan tersebut dilacak dalam alat pengembangan Anda, seperti riwayat versi Git. Adanya jejak audit ini berarti bahwa Anda dapat meninjau detail dari setiap perubahan, siapa yang melakukan perubahan, dan kapan perubahan dilakukan. Jika Anda menggunakan alat pengiriman berkelanjutan, Anda juga dapat merujuk kembali ke log penyebaran terperinci dan melihat persis apa yang terjadi pada setiap pembaruan.
Dokumentasi: Anda dapat menggunakan banyak konfigurasi infrastruktur sebagai kode untuk menambahkan metadata, seperti komentar, yang menjelaskan tujuan kode dalam konfigurasi Anda. Jika organisasi Anda sudah mengikuti proses dokumentasi kode, pertimbangkan untuk menggunakan prosedur yang sama ini dengan kode infrastruktur Anda.
Sistem terpadu: Sering kali, ketika pengembang sedang mengembangkan fitur baru, mereka harus membuat perubahan pada kode aplikasi dan kode infrastruktur. Saat Anda menggunakan sistem umum, organisasi Anda dapat lebih memahami hubungan antara aplikasi dan infrastruktur Anda.
Pemahaman yang lebih baik tentang infrastruktur cloud: Ketika Anda menggunakan portal Microsoft Azure untuk menentukan sumber daya, banyak dari prosesnya tidak ditampilkan. Infrastruktur sebagai kode dapat membantu memberikan pemahaman yang lebih baik tentang cara kerja Azure dan cara memecahkan masalah yang mungkin muncul. Misalnya, saat Anda membuat komputer virtual dengan menggunakan portal Microsoft Azure, beberapa sumber daya yang dibuat tidak ditampilkan. Disk terkelola dan kartu antarmuka jaringan disebarkan di belakang layar. Ketika Anda menyebarkan komputer virtual yang sama dengan menggunakan infrastruktur sebagai kode, Anda memiliki kontrol penuh atas semua sumber daya yang dibuat. Dengan Terraform, Anda juga memiliki file status yang berisi banyak informasi tentang sumber daya yang Anda sebarkan yang dapat Anda tambang untuk informasi atau digunakan untuk mendeteksi penyimpangan.
Kode imperatif dan deklaratif
Anda dapat menulis manual petunjuk untuk perakitan mainan dengan cara yang berbeda. Saat Anda mengotomatiskan penyebaran layanan dan infrastruktur, ada dua pendekatan berbeda yang dapat Anda lakukan: imperatif dan deklaratif.
Dengan kode imperatif, Anda menjalankan serangkaian perintah dalam urutan tertentu untuk mencapai konfigurasi akhir. Proses ini menentukan apa yang harus dicapai oleh kode dan menentukan cara menyelesaikan tugas. Pendekatan imperatif mirip seperti manual petunjuk langkah demi langkah.
Dengan kode deklaratif, Anda hanya menentukan konfigurasi akhir. Kode tersebut tidak menentukan cara menyelesaikan tugas. Pendekatan deklaratif mirip seperti tampilan instruksi terperinci.
Saat Anda memilih antara menggunakan pendekatan imperatif atau pendekatan deklaratif untuk provisi sumber daya, pertimbangkan alat yang mungkin sudah digunakan di organisasi Anda. Pertimbangkan juga pendekatan mana yang mungkin cocok dengan keterampilan Anda sendiri.
Kode imperatif
Di Azure, pendekatan kode imperatif dilakukan secara terprogram dengan menggunakan bahasa pemrogram pembuatan skrip seperti Bash atau Azure PowerShell. Skrip tersebut menjalankan serangkaian langkah untuk membuat, memodifikasi, dan bahkan menghapus sumber daya Anda.
Contoh ini memperlihatkan dua perintah Azure CLI yang membuat grup sumber daya dan akun penyimpanan.
#!/usr/bin/env bash
az group create \
--name storage-resource-group \
--location eastus
az storage account create \
--name mystorageaccount \
--resource-group storage-resource-group \
--location eastus \
--sku Standard_LRS \
--kind StorageV2 \
--access-tier Hot \
--https-only true
Perintah yang pertama membuat grup sumber daya bernama storage-resource-group
di wilayah US Timur. Perintah kedua membuat akun penyimpanan bernama mystorageaccount
dalam storage-resource-group
grup sumber daya yang dibuat di perintah pertama. Perintah kedua juga mengonfigurasi beberapa properti untuk akun penyimpanan, termasuk jenis akun penyimpanan dan tingkat aksesnya.
Anda dapat menggunakan pendekatan imperatif untuk sepenuhnya mengotomatiskan provisi sumber daya, tetapi pendekatan tersebut memiliki beberapa kelemahan. Seiring dengan arsitektur Anda yang lebih matang, skrip juga dapat menjadi rumit untuk dikelola. Perintah dapat diperbarui atau tidak digunakan lagi, yang memerlukan tinjauan skrip yang ada.
Kode deklaratif
Di Azure, pendekatan kode deklaratif dicapai dengan menggunakan templat atau modul. Banyak jenis yang tersedia untuk digunakan, termasuk:
- Terraform oleh HashiCorp
- Bisep
- ARM JSON
Catatan
Modul ini berfokus pada penggunaan modul Terraform.
Lihat contoh modul Terraform berikut yang mengonfigurasi akun penyimpanan. Konfigurasi akun penyimpanan cocok dengan contoh Azure CLI.
resource "azurerm_resource_group" "example" {
name = "storage-resource-group"
location = "eastus"
}
resource "azurerm_storage_account" "example" {
name = "mystorageaccount"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
sku = "Standard"
account_replication_type = "GRS"
account_kind = "StorageV2"
access_tier = "Hot"
enable_https_traffic_only = true
}
Blok sumber daya menentukan grup sumber daya dan konfigurasi akun penyimpanan.
azurerm_storage_account
Blok berisi nama, lokasi, dan properti akun penyimpanan, termasuk SKU dan jenis akunnya.
Anda mungkin melihat bahwa modul Terraform tidak menentukan cara menyebarkan akun penyimpanan. Templat Bicep hanya menentukan tampilan penyimpanan seperti yang seharusnya. Langkah-langkah yang diambil untuk membuat atau memperbarui akun penyimpanan ini diserahkan kepada Terraform CLI dan penyedia Terraform azurerm untuk memutuskan.