Menginstal Terraform di Windows dengan Azure PowerShell

Terraform memungkinkan definisi, pratinjau, dan penyebaran infrastruktur cloud. Menggunakan Terraform, Anda membuat file konfigurasi menggunakan sintaksis HCL. Sintaksis HCL memungkinkan Anda menentukan penyedia cloud - seperti Azure - dan elemen yang membentuk infrastruktur cloud Anda. Setelah membuat file konfigurasi, Anda membuat rencana eksekusi yang memungkinkan Anda untuk melihat pratinjau perubahan infrastruktur Anda sebelum disebarkan. Setelah memverifikasi perubahan, Anda menerapkan rencana eksekusi untuk menyebarkan infrastruktur.

Artikel ini menjelaskan cara mulai menggunakan Terraform di Azure menggunakan PowerShell.

Dalam artikel ini, Anda akan mempelajari cara:

  • Menginstal versi terbaru PowerShell
  • Menginstal Modul Az PowerShell baru
  • Instal Azure CLI
  • Menginstal Terraform
  • Memahami skenario autentikasi Terraform dan Azure yang umum
  • Autentikasi melalui akun Microsoft dari Cloud Shell (menggunakan Bash atau PowerShell)
  • Autentikasi melalui akun Microsoft dari Windows (menggunakan Bash atau PowerShell)
  • Buat perwakilan layanan menggunakan Azure CLI
  • Membuat perwakilan layanan menggunakan Azure PowerShell
  • Tentukan info masuk perwakilan layanan dalam variabel lingkungan
  • Tentukan info masuk perwakilan layanan dalam blok penyedia Terraform

1. Mengonfigurasi lingkungan Anda

  • Langganan Azure: Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.

2. Menginstal Azure PowerShell

  1. Modul PowerShell terbaru yang memungkinkan interaksi dengan sumber daya Azure disebut modul Az Azure PowerShell. Saat menggunakan modul Az Azure PowerShell, PowerShell 7 (atau lebih baru) adalah versi yang direkomendasikan di semua platform. Jika Anda telah menginstal PowerShell, Anda dapat memverifikasi versi dengan memasukkan perintah berikut di prompt PowerShell.

    $PSVersionTable.PSVersion
    
  2. Instal PowerShell. Demo ini diuji menggunakan PowerShell 7.2.1 (x64) pada Windows 10.

3. Instal Azure CLI

Agar Terraform mengautentikasi ke Azure, Anda perlu menginstal Azure CLI. Demo ini diuji menggunakan Azure CLI versi 2.32.0.

4. Instal Terraform untuk Windows

  1. Unduh Terraform. Artikel ini diuji menggunakan Terraform versi 1.1.4.

  2. Dari unduhan, ekstrak file yang dapat dieksekusi ke direktori yang Anda pilih (misalnya, c:\terraform).

  3. Perbarui variabel lingkungan PATH global sistem Anda untuk menyertakan direktori yang berisi executable.

  4. Buka jendela terminal.

  5. Verifikasi konfigurasi jalur global menggunakan perintah terraform.

    terraform -version
    

5. Mengautentikasi Terraform ke Azure

Skenario autentikasi Terraform dan Azure

Terraform hanya mendukung autentikasi ke Azure melalui Azure CLI. Autentikasi menggunakan Azure PowerShell tidak didukung. Oleh karena itu, meskipun Anda dapat menggunakan modul Azure PowerShell saat melakukan pekerjaan Terraform Anda, Anda harus terlebih dahulu mengautentikasi ke Azure menggunakan Azure CLI.

Artikel ini menjelaskan cara mengautentikasi Terraform ke Azure untuk skenario berikut. Untuk informasi selengkapnya tentang opsi untuk mengautentikasi Terraform ke Azure, lihat Mengautentikasi menggunakan Azure CLI.

Autentikasi ke Azure melalui akun Microsoft

Akun Microsoft adalah nama pengguna (terkait dengan email dan info masuknya) yang digunakan untuk masuk ke layanan Microsoft - seperti Azure. Akun Microsoft dapat dikaitkan dengan satu atau beberapa langganan Azure, dan salah satu langganan tersebut dijadikan sebagai default.

Langkah-langkah berikut menunjukkan caranya:

  • Masuk ke Azure secara interaktif menggunakan akun Microsoft
  • Mencantumkan langganan Azure terkait akun (termasuk default)
  • Atur langganan saat ini.
  1. Buka baris perintah yang memiliki akses ke Azure CLI.

  2. Jalankan az login tanpa parameter apa pun dan ikuti instruksi untuk masuk ke Azure.

    az login
    

    Poin utama:

    • Setelah berhasil masuk, az login menampilkan daftar langganan Azure yang terkait dengan akun Microsoft yang masuk, termasuk langganan default.
  3. Untuk mengonfirmasi langganan Azure saat ini, jalankan az account show.

    az account show
    
  4. Untuk melihat semua nama dan ID langganan Azure untuk akun Microsoft tertentu, jalankan az account list.

    az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
    

    Poin utama:

    • Ganti tempat penampung <microsoft_account_email> dengan alamat email akun Microsoft yang langganan Azure-nya ingin Anda cantumkan.
    • Dengan akun Live - seperti Hotmail atau Outlook - Anda mungkin perlu menentukan alamat email yang sepenuhnya memenuhi syarat. Misalnya, jika alamat email Anda admin@hotmail.com, Anda mungkin perlu mengganti tempat penampung dengan live.com#admin@hotmail.com.
  5. Untuk menggunakan langganan Azure tertentu, jalankan az account set.

    az account set --subscription "<subscription_id_or_subscription_name>"
    

    Poin utama:

    • Ganti tempat penampung <subscription_id_or_subscription_name> dengan ID atau nama langganan yang ingin Anda gunakan.
    • Memanggil az account set tidak menampilkan hasil dari beralih ke langganan Azure yang ditentukan. Namun, Anda dapat menggunakan az account show untuk mengonfirmasi bahwa langganan Azure saat ini telah berubah.
    • Jika Anda menjalankan perintah az account list dari langkah sebelumnya, Anda melihat bahwa langganan Azure default telah berubah menjadi langganan yang Anda tentukan menggunakan az account set.

Membuat perwakilan layanan

Alat otomatis yang menyebarkan atau menggunakan layanan Azure - seperti Terraform - harus selalu memiliki izin terbatas. Selain masuk aplikasi sebagai pengguna yang memiliki hak istimewa, Azure menawarkan prinsipal layanan.

Pola yang paling umum ialah masuk secara interaktif ke Azure, membuat perwakilan layanan, menguji perwakilan layanan, kemudian menggunakan perwakilan layanan tersebut untuk autentikasi di masa mendatang (baik secara interaktif atau dari skrip Anda).

  1. Untuk membuat perwakilan layanan, masuk ke Azure. Setelah mengautentikasi ke Azure melalui akun Microsoft, kembali ke sini.

  2. Jika Anda membuat perwakilan layanan dari Git Bash, atur variabel lingkungan MSYS_NO_PATHCONV. (Langkah ini tidak diperlukan jika Anda menggunakan Cloud Shell.)

    export MSYS_NO_PATHCONV=1    
    

    Poin utama:

    • Anda dapat mengatur variabel lingkungan MSYS_NO_PATHCONV secara global (untuk semua sesi terminal) atau secara lokal (hanya untuk sesi saat ini). Karena membuat perwakilan layanan bukanlah sesuatu yang sering Anda lakukan, sampel menetapkan nilai untuk sesi saat ini. Untuk mengatur variabel lingkungan ini secara global, tambahkan pengaturan ke file ~/.bashrc.
  3. Untuk membuat perwakilan layanan, jalankan az ad sp create-for-rbac.

    az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
    

    Poin utama:

    • Anda dapat mengganti <service-principal-name> dengan nama khusus untuk lingkungan Anda atau menghilangkan parameter sepenuhnya. Jika Anda menghilangkan parameter, nama prinsipal layanan dibuat berdasarkan tanggal dan waktu saat ini.
    • Setelah berhasil diselesaikan, az ad sp create-for-rbac menampilkan beberapa nilai. Nilai appId, password, dan tenant digunakan di langkah berikutnya.
    • Kata sandi tidak dapat diambil kembali jika hilang. Maka dari itu, Anda harus menyimpan kata sandi Anda di tempat yang aman. Jika Anda lupa kata sandi, Anda bisa mereset info masuk perwakilan layanan.
    • Untuk artikel ini, perwakilan layanan dengan peran Kontributor sedang digunakan. Untuk informasi selengkapnya tentang peran Role-Based Access Control (RBAC), lihat RBAC: Peran bawaan.
    • Output dari pembuatan perwakilan layanan ini mencakup info masuk sensitif. Pastikan Anda tidak menyertakan info masuk ini dalam kode atau memasukkan info masuk ke dalam kontrol sumber Anda.
    • Untuk informasi selengkapnya tentang opsi saat membuat perwakilan layanan dengan Azure CLI, lihat artikel Buat perwakilan layanan Azure menggunakan Azure CLI.

Tentukan info masuk perwakilan layanan dalam variabel lingkungan

Setelah membuat perwakilan layanan, Anda dapat menentukan info masuknya ke Terraform melalui variabel lingkungan.

  1. Edit file ~/.bashrc dengan menambahkan variabel lingkungan berikut.

    export ARM_SUBSCRIPTION_ID="<azure_subscription_id>"
    export ARM_TENANT_ID="<azure_subscription_tenant_id>"
    export ARM_CLIENT_ID="<service_principal_appid>"
    export ARM_CLIENT_SECRET="<service_principal_password>"
    
  2. Untuk menjalankan skrip ~/.bashrc, jalankan source ~/.bashrc (atau singkatannya yang setara. ~/.bashrc). Anda juga dapat keluar dan membuka kembali Cloud Shell agar skrip dapat berjalan secara otomatis.

    . ~/.bashrc
    
  3. Setelah variabel lingkungan ditetapkan, Anda dapat memverifikasi nilainya sebagai berikut:

    printenv | grep ^ARM*
    

Poin utama:

  • Seperti halnya variabel lingkungan apa pun, untuk mengakses nilai langganan Azure dari dalam skrip Terraform, gunakan sintaksis berikut: ${env.<environment_variable>}. Misalnya, untuk mengakses nilai ARM_SUBSCRIPTION_ID, tentukan ${env.ARM_SUBSCRIPTION_ID}.
  • Membuat dan menerapkan paket eksekusi Terraform menimbulkan perubahan pada langganan Azure yang terkait dengan perwakilan layanan. Fakta ini terkadang membingungkan jika Anda masuk ke satu langganan Azure dan variabel lingkungan mengarah ke langganan Azure kedua. Mari kita lihat contoh berikut untuk penjelasannya. Katakanlah Anda memiliki dua langganan Azure: SubA dan SubB. Jika langganan Azure saat ini adalah SubA (ditentukan melalui az account show) sementara variabel lingkungan mengarah ke SubB, setiap perubahan yang dibuat oleh Terraform ada di SubB. Oleh karena itu, Anda harus masuk ke langganan SubB Anda untuk menjalankan perintah Azure CLI atau perintah Azure PowerShell guna melihat perubahan Anda.

Tentukan info masuk perwakilan layanan dalam blok penyedia Terraform

Blok penyedia Azure mendefinisikan sintaksis yang memungkinkan Anda menentukan informasi autentikasi langganan Azure.

terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "~>2.0"
    }
  }
}

provider "azurerm" {
  features {}

  subscription_id   = "<azure_subscription_id>"
  tenant_id         = "<azure_subscription_tenant_id>"
  client_id         = "<service_principal_appid>"
  client_secret     = "<service_principal_password>"
}

# Your code goes here

Perhatian

Kemampuan untuk menentukan info masuk langganan Azure Anda dalam file konfigurasi Terraform bisa sangat mudah - terutama saat pengujian. Namun, tidak disarankan untuk menyimpan info masuk dalam file teks yang jelas yang dapat dilihat oleh individu yang tidak tepercaya.

Memecahkan masalah Terraform pada Azure

Memecahkan masalah umum saat menggunakan Terraform di Azure

Langkah berikutnya