Bagikan melalui


Menerapkan pengujian integrasi untuk proyek Terraform di Azure

Terraform memungkinkan definisi, pratinjau, dan penyebaran infrastruktur cloud. Dengan menggunakan Terraform, Anda membuat file konfigurasi menggunakan sintaks HCL . Sintaks 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 mempratinjau perubahan infrastruktur sebelum disebarkan. Setelah memverifikasi perubahan, Anda menerapkan rencana eksekusi untuk menyebarkan infrastruktur.

Pengujian integrasi memvalidasi bahwa perubahan kode yang baru diperkenalkan tidak merusak kode yang ada. Di DevOps, integrasi berkelanjutan (CI) mengacu pada proses yang membangun seluruh sistem setiap kali basis kode diubah - seperti seseorang yang ingin menggabungkan PR ke dalam repositori Git. Daftar berikut berisi contoh umum pengujian integrasi:

  • Alat analisis kode statis seperti lint dan format.
  • Jalankan terraform validate untuk mengecek sintaks file konfigurasi.
  • Jalankan terraform plan untuk memastikan konfigurasi akan berfungsi seperti yang diharapkan.

Dalam artikel ini, Anda mempelajari cara:

  • Pelajari dasar-dasar pengujian integrasi untuk proyek Terraform.
  • Gunakan Azure DevOps untuk mengonfigurasi alur integrasi berkelanjutan.
  • Jalankan analisis kode statis pada kode Terraform.
  • Jalankan terraform validate untuk memvalidasi file konfigurasi Terraform pada komputer lokal.
  • Jalankan terraform plan untuk memvalidasi file konfigurasi Terraform dari perspektif layanan jarak jauh.
  • Gunakan Azure Pipeline untuk mengotomatiskan integrasi berkelanjutan.

1. Mengonfigurasi lingkungan Anda

  • langganan Azure: Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.
  • organisasi danproyek Azure DevOps: Jika Anda tidak memilikinya, buat organisasi Azure DevOps.

  • ekstensi Tugas Build & Rilis Terraform: Instal ekstensi tugas build dan rilis Terraform ke organisasi Azure DevOps Anda.

  • Berikan akses Azure DevOps keLangganan Azure Anda: Buat sebuah koneksi layanan Azure bernama terraform-basic-testing-azure-connection untuk memungkinkan Azure Pipelines tersambung ke langganan Azure Anda

  • Contoh kode dan sumber daya: Unduh dari GitHub proyek pengujian integrasi. Direktori tempat Anda mengunduh sampel disebut sebagai direktori contoh .

2. Validasi konfigurasi Terraform lokal

Perintah terraform validate dijalankan dari baris perintah di direktori yang berisi file Terraform Anda. Tujuan utama perintah ini adalah memvalidasi sintaksis.

  1. Dalam direktori contoh, navigasikan ke direktori src.

  2. Jalankan terraform init untuk menginisialisasi direktori kerja.

    terraform init
    
  3. Jalankan terraform validate untuk memeriksa sintaksis file konfigurasi.

    terraform validate
    

    Poin utama:

    • Anda melihat pesan yang menunjukkan bahwa konfigurasi Terraform tersebut valid.
  4. Sunting file main.tf.

  5. Pada baris 5, sisipkan kesalahan ketik yang membatalkan sintaksis. Misalnya, ganti var.location dengan var.loaction

  6. Simpan berkas.

  7. Jalankan validasi lagi.

    terraform validate
    

    Poin utama:

    • Anda melihat pesan kesalahan yang menunjukkan baris kode yang bermasalah dan penjelasan mengenai kesalahan.

Seperti yang Anda lihat, Terraform telah mendeteksi masalah dalam sintaks kode konfigurasi. Masalah ini mencegah konfigurasi disebarkan.

Ini adalah praktik yang baik untuk selalu menjalankan terraform validate terhadap file Terraform Anda sebelum mendorongnya ke sistem kontrol versi Anda. Selain itu, tingkat validasi ini harus menjadi bagian dari alur integrasi berkelanjutan Anda. Nanti dalam artikel ini, kita akan menjelajahi cara mengonfigurasi alur Azure untuk memvalidasisecara otomatis.

3. Validasi konfigurasi Terraform

Di bagian sebelumnya, Anda melihat cara memvalidasi konfigurasi Terraform. Tingkat pengujian itu khusus untuk sintaksis. Pengujian itu tidak mempertimbangkan apa yang mungkin sudah disebarkan di Azure.

Terraform adalah bahasa deklaratif yang berarti Anda menyatakan apa yang Anda inginkan sebagai hasil akhir. Misalnya, Anda memiliki 10 komputer virtual dalam grup sumber daya. Kemudian, Anda membuat file Terraform yang menentukan tiga komputer virtual. Menerapkan paket ini tidak meningkatkan jumlah total menjadi 13. Sebagai gantinya, Terraform menghapus tujuh komputer virtual sehingga Anda berakhir dengan tiga. Menjalankan terraform plan memungkinkan Anda mengonfirmasi hasil potensial penerapan rencana eksekusi untuk menghindari kejutan.

Untuk menghasilkan rencana eksekusi Terraform, Anda menjalankan terraform plan. Perintah ini tersambung ke langganan Azure target untuk memeriksa bagian konfigurasi apa yang sudah disebarkan. Terraform kemudian menentukan perubahan yang diperlukan untuk memenuhi persyaratan yang dinyatakan dalam file Terraform. Pada tahap ini, Terraform tidak melakukan penyebaran apa pun. Ini memberi tahu Anda apa yang akan terjadi jika Anda menerapkan rencana.

Jika Anda mengikuti artikel dan telah melakukan langkah-langkah di bagian sebelumnya, jalankan perintah terraform plan:

terraform plan

Setelah menjalankan terraform plan, Terraform menampilkan potensi hasil penerapan rencana eksekusi. Output menunjukkan sumber daya Azure yang akan ditambahkan, diubah, dan dihancurkan.

Secara default, Terraform menyimpan status di direktori lokal yang sama dengan file Terraform. Pola ini berfungsi dengan baik dalam skenario pengguna tunggal. Namun, ketika beberapa orang bekerja pada sumber daya Azure yang sama, file status lokal bisa tidak sinkron. Untuk memperbaiki masalah ini, Terraform mendukung penulisan file status ke penyimpanan data jarak jauh (seperti Azure Storage). Dalam skenario ini, mungkin bermasalah untuk menjalankan terraform plan pada komputer lokal dan menargetkan komputer jarak jauh. Akibatnya, mungkin masuk akal untuk mengotomatiskan langkah validasi ini sebagai bagian dari alur integrasi berkelanjutan Anda.

4. Jalankan analisis kode statis

Analisis kode statis dapat dilakukan langsung pada kode konfigurasi Terraform, tanpa mengeksekusinya. Analisis ini dapat berguna untuk mendeteksi masalah seperti masalah keamanan dan inkonsistensi kepatuhan.

Alat berikut menyediakan analisis statis untuk file Terraform:

Analisis statis sering dijalankan bagian dari alur integrasi berkelanjutan. Pengujian ini tidak memerlukan pembuatan rencana pelaksanaan atau penyebaran perangkat lunak. Akibatnya, mereka berjalan lebih cepat daripada pengujian lain dan umumnya dijalankan terlebih dahulu dalam proses integrasi berkelanjutan.

5. Mengotomatiskan pengujian integrasi menggunakan Azure Pipeline

Integrasi berkelanjutan melibatkan pengujian seluruh sistem ketika perubahan diperkenalkan. Di bagian ini, Anda akan melihat konfigurasi Azure Pipeline yang digunakan untuk menerapkan integrasi berkelanjutan.

  1. Dengan menggunakan editor pilihan Anda, telusuri kloning lokal proyek sampel Terraform di GitHub.

  2. Buka file samples/integration-testing/src/azure-pipeline.yaml.

  3. Gulir ke bawah ke bagian langkah di mana Anda melihat serangkaian langkah standar yang digunakan untuk menjalankan berbagai rutinitas penginstalan dan validasi.

  4. Tinjau baris yang berbunyi, Langkah 1: jalankan Checkov Static Code Analysis. Dalam langkah ini, proyek Checkov yang disebutkan sebelumnya menjalankan analisis kode statis pada sampel konfigurasi Terraform.

    - bash: $(terraformWorkingDirectory)/checkov.sh $(terraformWorkingDirectory)
      displayName: Checkov Static Code Analysis
    

    Poin utama:

    • Skrip ini bertanggung jawab untuk menjalankan Checkov di ruang kerja Terraform yang dipasang di dalam kontainer Docker. Agen yang dikelola Microsoft diaktifkan Docker. Menjalankan alat di dalam kontainer Docker lebih mudah dan menghapus kebutuhan untuk menginstal Checkov pada agen Azure Pipeline.
    • Variabel $(terraformWorkingDirectory) ditentukan dalam file azure-pipeline.yaml.
  5. Tinjau baris yang berbunyi, Langkah 2: instal Terraform pada agen Azure Pipelines. Ekstensi Tugas Rilis Terraform Build & yang Anda instal sebelumnya memiliki perintah untuk menginstal Terraform pada agen yang menjalankan Azure Pipeline. Tugas inilah yang sedang dilakukan dalam langkah ini.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-installer.TerraformInstaller@0
      displayName: 'Install Terraform'
      inputs:
        terraformVersion: $(terraformVersion)
    

    Poin utama:

    • Versi Terraform yang akan diinstal ditentukan melalui variabel Azure Pipeline bernama terraformVersion dan ditentukan dalam file azure-pipeline.yaml.
  6. Tinjau baris yang berbunyi, Langkah 3: jalankan init Terraform untuk menginisialisasi ruang kerja. Sekarang setelah Terraform diinstal pada agen, direktori Terraform dapat diinisialisasi.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0
      displayName: 'Run terraform init'
      inputs:
        command: init
        workingDirectory: $(terraformWorkingDirectory)
    

    Poin utama:

    • Input command menentukan perintah Terraform mana yang akan dijalankan.
    • Input workingDirectory menunjukkan jalur direktori Terraform.
    • Variabel $(terraformWorkingDirectory) ditentukan dalam file azure-pipeline.yaml.
  7. Tinjau baris yang berbunyi, Langkah 4: jalankan validasi Terraform untuk memvalidasi sintaks HCL. Setelah direktori proyek diinisialisasi, terraform validate dijalankan untuk memvalidasi konfigurasi di server.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0
      displayName: 'Run terraform validate'
      inputs:
        command: validate
        workingDirectory: $(terraformWorkingDirectory)
    
  8. Tinjau baris yang berbunyi, Langkah 5: jalankan rencana Terraform untuk memvalidasi sintaks HCL. Seperti yang dijelaskan sebelumnya, menghasilkan rencana eksekusi dilakukan untuk memverifikasi apakah konfigurasi Terraform valid sebelum penyebaran.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0
      displayName: 'Run terraform plan'
      inputs:
        command: plan
        workingDirectory: $(terraformWorkingDirectory)
        environmentServiceName: $(serviceConnection)
        commandOptions: -var location=$(azureLocation)
    

    Poin utama:

    • Input environmentServiceName mengacu pada nama koneksi layanan Azure yang dibuat di Mengonfigurasi lingkungan Anda. Koneksi memungkinkan Terraform mengakses langganan Azure Anda.
    • Input commandOptions digunakan untuk meneruskan argumen ke perintah Terraform. Dalam hal ini, lokasi sedang ditentukan. Variabel $(azureLocation) ditentukan sebelumnya dalam file YAML.

Mengimpor alur ke Azure DevOps

  1. Buka proyek Azure DevOps Anda dan masuk ke bagian Azure Pipelines.

  2. Pilih tombol Buat Alur.

  3. Untuk opsi Di mana kode Anda? , pilih GitHub (YAML).

    Di mana kode Anda?

  4. Pada titik ini, Anda mungkin harus mengotorisasi Azure DevOps untuk mengakses organisasi Anda. Untuk informasi selengkapnya tentang topik ini, lihat artikel, Membangun repositori GitHub.

  5. Di daftar repositori, pilih fork repositori yang Anda buat di organisasi GitHub Anda.

  6. Di langkah Mengonfigurasi alur Anda, pilih untuk memulai dari alur YAML yang sudah ada.

    pipeline YAML yang ada

  7. Saat halaman Pilih alur pipa YAML yang sudah ada ditampilkan, tentukan cabang master dan masukkan jalur ke alur pipa YAML: samples/integration-testing/src/azure-pipeline.yaml.

    Pilih alur YAML yang ada

  8. Pilih Lanjutkan untuk memuat alur Azure YAML dari GitHub.

  9. Pada saat halaman Tinjau pipeline YAML Anda ditampilkan, pilih Jalankan untuk membuat dan memicu pipeline secara manual untuk pertama kalinya.

    Jalankan azure Pipeline

Memverifikasi hasilnya

Anda dapat menjalankan alur secara manual dari antarmuka pengguna Azure DevOps. Namun, inti dari artikel ini adalah untuk menunjukkan integrasi berkelanjutan otomatis. Uji proses dengan menerapkan perubahan pada folder samples/integration-testing/src repositori fork Anda. Perubahan akan secara otomatis memicu jalur pengiriman baru di cabang tempat Anda sedang mengirimkan kode.

Alur berjalan dari gitHub

Setelah Anda melakukan langkah itu, akses detail di Azure DevOps untuk memastikan bahwa semuanya berjalan dengan benar.

Azure DevOps Alur Hijau

Memecahkan masalah Terraform di Azure

Memecahkan masalah umum saat menggunakan Terraform di Azure

Langkah berikutnya