Bagikan melalui


Infrastruktur sebagai Kode

Infrastruktur sebagai Kode (IaC) adalah praktik DevOps utama yang melibatkan manajemen infrastruktur, seperti jaringan, layanan komputasi, database, penyimpanan, dan topologi koneksi, dalam model deskriptif. IaC memungkinkan tim untuk mengembangkan dan merilis perubahan lebih cepat dan dengan keyakinan yang lebih besar. Manfaat IaC meliputi:

  • Peningkatan kepercayaan diri dalam penyebaran
  • Kemampuan untuk mengelola beberapa lingkungan
  • Peningkatan pemahaman tentang status infrastruktur

Untuk informasi selengkapnya tentang manfaat menggunakan Infrastruktur sebagai Kode, lihat Infrastruktur yang dapat diulang.

Alat

Ada dua pendekatan yang dapat Anda lakukan saat menerapkan Infrastruktur sebagai Kode.

  • Infrastruktur Imperatif sebagai Kode melibatkan penulisan skrip dalam bahasa seperti Bash atau PowerShell. Anda secara eksplisit menyatakan perintah yang dijalankan untuk menghasilkan hasil yang diinginkan. Saat Anda menggunakan penyebaran imperatif, Terserah Anda untuk mengelola urutan dependensi, kontrol kesalahan, dan pembaruan sumber daya.
  • Infrastruktur Deklaratif sebagai Kode melibatkan penulisan definisi yang menentukan tampilan lingkungan Anda. Dalam definisi ini, Anda menentukan hasil yang diinginkan daripada bagaimana Anda ingin hasil itu dicapai. Alat ini mencari tahu cara membuat hasil terjadi dengan memeriksa status Anda saat ini, membandingkannya dengan status target Anda, lalu menerapkan perbedaannya.

Templat ARM

Tinjau informasi tentang templat Azure Resource Manager (templat ARM).

Bicep

Bicep adalah bahasa pemrogram khusus domain (DSL) yang menggunakan sintaks deklaratif untuk menyebarkan sumber daya Azure. Dalam file Bicep, Anda menentukan infrastruktur yang ingin Anda sebarkan dan propertinya. Dibandingkan dengan templat ARM, file Bicep lebih mudah dibaca dan ditulis untuk audiens non-pengembang karena menggunakan sintaks ringkas.

param location string = resourceGroup().location
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

Terraform

Tinjau informasi tentang Terraform.

Azure CLI

Tinjau informasi tentang Azure CLI.

Modul Infrastruktur sebagai Kode

Salah satu tujuan penggunaan kode untuk menyebarkan infrastruktur adalah untuk menghindari duplikasi pekerjaan atau membuat beberapa templat untuk tujuan yang sama atau serupa. Modul infrastruktur harus dapat digunakan kembali dan fleksibel dan harus memiliki tujuan yang jelas.

Modul adalah file independen, biasanya berisi sekumpulan sumber daya yang dimaksudkan untuk disebarkan bersama-sama. Modul memungkinkan Anda untuk memecah templat kompleks menjadi set kode yang lebih kecil dan lebih mudah dikelola. Anda dapat memastikan bahwa setiap modul berfokus pada tugas tertentu dan bahwa semua modul dapat digunakan kembali untuk beberapa penyebaran dan beban kerja.

Modul Bicep

Bicep memungkinkan Anda membuat dan memanggil modul. Setelah modul dibuat, modul dapat dikonsumsi dari templat Bicep lainnya. Modul Bicep berkualitas tinggi harus menentukan beberapa sumber daya terkait. Misalnya, saat Anda menentukan fungsi Azure, Anda biasanya menyebarkan aplikasi tertentu, paket hosting untuk aplikasi tersebut, dan akun penyimpanan untuk metadata aplikasi tersebut. Komponen-komponen ini didefinisikan secara terpisah, tetapi membentuk pengelompokan sumber daya yang logis, jadi Anda harus mempertimbangkan untuk mendefinisikannya bersama-sama sebagai modul.

Modul Bicep umumnya menggunakan:

  • Parameter untuk menerima nilai dari modul panggilan.
  • Nilai output untuk mengembalikan hasil ke modul panggilan.
  • Sumber daya untuk menentukan satu atau beberapa objek infrastruktur untuk dikelola modul.

Menerbitkan modul Bicep

Anda memiliki beberapa opsi untuk menerbitkan dan berbagi modul Bicep.

  • Registri publik: Registri modul publik dihosting dalam registri kontainer Microsoft (MCR). Kode sumber dan modul yang dikandungnya disimpan di GitHub.
  • Registri privat: Anda dapat menggunakan registri kontainer Azure untuk menerbitkan modul ke registri privat. Untuk informasi tentang menerbitkan modul ke registri dalam alur CI/CD, lihat Tindakan Bicep dan GitHub, atau jika Anda mau, Bicep dan Azure Pipelines.
  • Spesifikasi Templat: Anda dapat menggunakan spesifikasi templat untuk menerbitkan modul Bicep. Spesifikasi templat dimaksudkan untuk menjadi templat lengkap, tetapi Bicep memungkinkan Anda menggunakan spesifikasi templat untuk menyebarkan modul.
  • Sistem kontrol versi: Anda dapat memuat modul langsung dari alat kontrol versi seperti GitHub atau Azure DevOps.

Modul terraform

Terraform memungkinkan Anda membuat dan memanggil modul. Setiap konfigurasi Terraform memiliki setidaknya satu modul, yang dikenal sebagai modul akarnya, yang terdiri dari sumber daya yang ditentukan dalam .tf file di direktori kerja utama Anda. Setiap modul dapat memanggil modul lain, yang memungkinkan Anda menyertakan modul anak dalam file konfigurasi utama Anda. Modul juga dapat dipanggil beberapa kali dalam konfigurasi yang sama atau dari konfigurasi yang berbeda.

Modul didefinisikan dengan semua konsep bahasa konfigurasi yang sama. Mereka paling umum menggunakan:

  • Input variabel untuk menerima nilai dari modul panggilan.
  • Nilai output untuk mengembalikan hasil ke modul panggilan.
  • Sumber daya untuk menentukan satu atau beberapa objek infrastruktur untuk dikelola modul.

Menerbitkan modul Terraform

Anda memiliki beberapa opsi untuk menerbitkan dan berbagi modul Terraform:

  • Registri publik: HashiCorp memiliki Terraform Module Registry mereka sendiri yang memungkinkan pengguna untuk menghasilkan modul Terraform yang dapat dibagikan. Saat ini ada beberapa modul Azure yang diterbitkan di Terraform Module Registry.
  • Registri privat: Anda dapat menerbitkan modul Terraform dengan lancar ke repositori privat seperti Terraform Cloud Private Registry atau Azure Container Registry.
  • Sistem kontrol versi: Anda dapat memuat modul privat langsung dari alat kontrol versi seperti GitHub. Untuk informasi tentang sumber yang didukung, lihat Sumber modul Terraform.

Mempertimbangkan rancangan

  • Pertimbangkan untuk menggunakan IaC saat menyebarkan sumber daya zona pendaratan ke Azure. IaC sepenuhnya mewujudkan pengoptimalan penyebaran, mengurangi upaya konfigurasi, dan mengotomatiskan seluruh penyebaran lingkungan.

  • Tentukan apakah Anda harus mengambil pendekatan IaC imperatif atau deklaratif.

    • Jika mengambil pendekatan imperatif, secara eksplisit menyatakan perintah yang akan dijalankan yang menghasilkan hasil yang Anda inginkan.

    • Jika mengambil pendekatan deklaratif, tentukan hasil yang Anda inginkan daripada bagaimana Anda ingin melakukannya.

  • Pertimbangkan cakupan penyebaran. Memiliki pemahaman yang baik tentang tingkat manajemen dan hierarki Azure. Setiap penyebaran IaC harus mengetahui cakupan tempat sumber daya Azure disebarkan.

  • Tentukan apakah Anda harus menggunakan alat IaC asli Azure atau Azure non-asli. Poin yang perlu dipertimbangkan:

    • Alat asli Azure seperti Azure CLI, Templat ARM, dan Bicep didukung penuh oleh Microsoft, yang memungkinkan fitur baru mereka untuk diintegrasikan lebih cepat.

    • Alat non-asli seperti Terraform memungkinkan Anda mengelola infrastruktur sebagai kode di beberapa penyedia cloud seperti AWS atau GCP. Namun, fitur Azure baru dapat memakan waktu untuk disertakan dalam non-asli. Jika organisasi Anda multicloud atau organisasi Anda sudah menggunakan dan berpengalaman di Terraform, pertimbangkan untuk menggunakan Terraform untuk menyebarkan zona pendaratan Azure.

  • Karena modul memungkinkan Anda untuk memecah templat kompleks menjadi set kode yang lebih kecil, pertimbangkan untuk menggunakan modul IaC untuk sumber daya yang umumnya disebarkan bersama-sama. Anda dapat memastikan setiap modul berfokus pada tugas tertentu dan dapat digunakan kembali untuk beberapa penyebaran dan beban kerja.

  • Pertimbangkan untuk mengadopsi strategi penerbitan untuk modul IaC dengan memilih antara registri publik, registri privat, atau sistem kontrol versi seperti repositori Git.

  • Pertimbangkan untuk menggunakan alur CI/CD untuk penyebaran IaC. Alur memberlakukan proses yang dapat digunakan kembali yang Anda tetapkan untuk memastikan kualitas penyebaran dan lingkungan Azure Anda.

Rekomendasi desain

  • Mengadopsi pendekatan IaC untuk menyebarkan, mengelola, mengatur, dan mendukung penyebaran zona pendaratan Azure.

  • Gunakan alat asli Azure untuk IaC dalam skenario berikut:

    • Anda hanya ingin menggunakan alat asli Azure. Organisasi Anda mungkin memiliki pengalaman penyebaran templat ARM atau Bicep sebelumnya.

    • Organisasi Anda ingin memiliki dukungan langsung untuk semua pratinjau dan versi GA layanan Azure.

  • Gunakan alat non-asli untuk IaC dalam skenario berikut:

    • Organisasi Anda saat ini menggunakan Terraform untuk menyebarkan infrastruktur ke cloud lain seperti AWS atau GCP.

    • Organisasi Anda tidak perlu memiliki dukungan langsung untuk semua pratinjau dan versi GA layanan Azure.

  • Gunakan modul IaC yang dapat digunakan kembali untuk menghindari pekerjaan berulang. Anda dapat berbagi modul di seluruh organisasi untuk menyebarkan beberapa proyek atau beban kerja dan mengelola kode yang kurang kompleks.

  • Terbitkan dan gunakan modul IaC dari registri publik dalam skenario berikut:

    • Anda ingin menggunakan modul untuk Zona Pendaratan Azure yang sudah diterbitkan ke registri publik. Untuk informasi selengkapnya, lihat Modul Terraform zona pendaratan Azure.

    • Anda ingin menggunakan modul yang dipertahankan, diperbarui, dan didukung oleh Microsoft, Terraform, atau penyedia modul lainnya.

      • Pastikan Anda memeriksa pernyataan dukungan dari penyedia modul apa pun yang Anda evaluasi.
  • Terbitkan dan gunakan modul IaC dari registri privat atau sistem kontrol versi dalam skenario berikut:

    • Anda ingin membuat modul Anda sendiri berdasarkan persyaratan organisasi Anda.

    • Anda ingin memiliki kontrol penuh atas semua fitur dan memelihara, memperbarui, dan menerbitkan versi modul baru.

  • Gunakan alur CI/CD untuk menyebarkan artefak IaC dan memastikan kualitas penyebaran dan lingkungan Azure Anda.