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.
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.
Mengonfigurasi Terraform: Jika Anda belum melakukannya, konfigurasikan Terraform menggunakan salah satu opsi berikut:
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 AndaContoh 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.
Dalam direktori contoh, navigasikan ke direktori
src
.Jalankan terraform init untuk menginisialisasi direktori kerja.
terraform init
Jalankan terraform validate untuk memeriksa sintaksis file konfigurasi.
terraform validate
Poin utama:
- Anda melihat pesan yang menunjukkan bahwa konfigurasi Terraform tersebut valid.
Sunting file
main.tf
.Pada baris 5, sisipkan kesalahan ketik yang membatalkan sintaksis. Misalnya, ganti
var.location
denganvar.loaction
Simpan berkas.
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.
Dengan menggunakan editor pilihan Anda, telusuri kloning lokal proyek sampel Terraform di GitHub.
Buka file
samples/integration-testing/src/azure-pipeline.yaml
.Gulir ke bawah ke bagian langkah di mana Anda melihat serangkaian langkah standar yang digunakan untuk menjalankan berbagai rutinitas penginstalan dan validasi.
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 fileazure-pipeline.yaml
.
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 fileazure-pipeline.yaml
.
- Versi Terraform yang akan diinstal ditentukan melalui variabel Azure Pipeline bernama
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 fileazure-pipeline.yaml
.
- Input
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)
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.
- Input
Mengimpor alur ke Azure DevOps
Buka proyek Azure DevOps Anda dan masuk ke bagian Azure Pipelines.
Pilih tombol Buat Alur.
Untuk opsi Di mana kode Anda? , pilih GitHub (YAML).
Pada titik ini, Anda mungkin harus mengotorisasi Azure DevOps untuk mengakses organisasi Anda. Untuk informasi selengkapnya tentang topik ini, lihat artikel, Membangun repositori GitHub.
Di daftar repositori, pilih fork repositori yang Anda buat di organisasi GitHub Anda.
Di langkah Mengonfigurasi alur Anda, pilih untuk memulai dari alur YAML yang sudah ada.
pipeline YAML yang ada
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
.alur YAML yang ada
Pilih Lanjutkan untuk memuat alur Azure YAML dari GitHub.
Pada saat halaman Tinjau pipeline YAML Anda ditampilkan, pilih Jalankan untuk membuat dan memicu pipeline secara manual untuk pertama kalinya.
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
Setelah Anda melakukan langkah itu, akses detail di Azure DevOps untuk memastikan bahwa semuanya berjalan dengan benar.
Memecahkan masalah Terraform di Azure
Memecahkan masalah umum saat menggunakan Terraform di Azure