Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Uji AWS infrastruktur dengan menggunakan LocalStack dan Tes Terraform
Ivan Girardi dan Ioannis Kalyvas, Amazon Web Services
Ringkasan
Pola ini membantu Anda menguji infrastruktur sebagai kode (IAc) secara lokal AWS di Terraform tanpa perlu menyediakan infrastruktur di lingkungan Anda. AWS Ini mengintegrasikan kerangka Terraform Tests
Solusi ini memberikan manfaat sebagai berikut:
Optimalisasi biaya — Menjalankan tes terhadap LocalStack menghilangkan kebutuhan untuk menggunakan Layanan AWS. Ini mencegah Anda mengeluarkan biaya yang terkait dengan pembuatan, pengoperasian, dan modifikasi sumber daya tersebut. AWS
Kecepatan dan efisiensi — Pengujian secara lokal juga biasanya lebih cepat daripada menggunakan sumber daya. AWS Loop umpan balik yang cepat ini mempercepat pengembangan dan debugging. Karena LocalStack berjalan secara lokal, Anda dapat mengembangkan dan menguji file konfigurasi Terraform Anda tanpa koneksi internet. Anda dapat men-debug file konfigurasi Terraform secara lokal dan menerima umpan balik langsung, yang merampingkan proses pengembangan.
Konsistensi dan reproduktifitas — LocalStack menyediakan lingkungan yang konsisten untuk pengujian. Konsistensi ini membantu memastikan bahwa pengujian menghasilkan hasil yang sama, terlepas dari AWS perubahan eksternal atau masalah jaringan.
Isolasi — Pengujian dengan LocalStack mencegah Anda memengaruhi AWS sumber daya hidup atau lingkungan produksi secara tidak sengaja. Isolasi ini membuatnya aman untuk bereksperimen dan menguji berbagai konfigurasi.
Otomasi - Integrasi dengan pipeline integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) membantu Anda menguji file konfigurasi Terraform secara otomatis.
Pipeline menguji IAc secara menyeluruh sebelum penerapan. Fleksibilitas — Anda dapat mensimulasikan berbagai konfigurasi Wilayah AWS Akun AWS, dan layanan agar sesuai dengan lingkungan produksi Anda lebih dekat.
Prasyarat dan batasan
Prasyarat
Instal
Docker Aktifkan akses
ke soket Docker default ( /var/run/docker.sock). Lihat informasi yang lebih lengkap dalam dokumentasi LocalStack. Instal
Docker Compose Instal
Terraform versi 1.6.0 atau yang lebih baru Instal
Terraform CLI Konfigurasikan
Penyedia Terraform AWS (Opsional) Instal dan konfigurasikan AWS Command Line Interface (AWS CLI). Untuk contoh cara menggunakan AWS CLI with LocalStack, lihat AWS Infrastruktur GitHub pengujian menggunakan LocalStack dan repositori Terraform Tests
.
Batasan
Pola ini memberikan contoh eksplisit untuk menguji sumber daya Amazon Simple Storage Service (Amazon S3),,, AWS Lambda dan AWS Step Functions Amazon DynamoDB. Namun, Anda dapat memperluas solusi ini untuk memasukkan AWS sumber daya tambahan.
Pola ini memberikan instruksi untuk menjalankan Terraform Tests secara lokal, tetapi dapatkah Anda dapat mengintegrasikan pengujian ke dalam pipeline apa pun. CI/CD
Pola ini memberikan instruksi untuk menggunakan gambar LocalStack Komunitas. Jika Anda menggunakan gambar LocalStack Pro, lihat dokumentasi LocalStack Pro
. LocalStack menyediakan layanan emulasi untuk yang berbeda AWS APIs. Untuk daftar lengkapnya, lihat Cakupan Fitur AWS Layanan
. Beberapa fitur canggih mungkin memerlukan langganan untuk LocalStack Pro.
Arsitektur
Diagram berikut menunjukkan arsitektur untuk solusi ini. Komponen utamanya adalah repositori kode sumber, CI/CD pipeline, dan wadah LocalStack Docker. LocalStack Docker Container meng-host yang berikut ini Layanan AWS secara lokal:
Bucket Amazon S3 untuk menyimpan file
Amazon CloudWatch untuk pemantauan dan pencatatan
AWS Lambda Fungsi untuk menjalankan kode tanpa server
Mesin AWS Step Functions negara untuk mengatur alur kerja multi-langkah
Tabel Amazon DynamoDB untuk menyimpan data NoSQL

Diagram menunjukkan alur kerja berikut:
Anda menambahkan dan mengkomit file konfigurasi Terraform ke repositori kode sumber.
CI/CD Pipeline mendeteksi perubahan dan memulai proses pembuatan untuk analisis kode Terraform statis. Pipeline membangun dan menjalankan wadah LocalStack Docker. Kemudian pipa memulai proses pengujian.
Pipeline mengunggah objek ke bucket Amazon S3 yang di-host di container Docker LocalStack .
Mengunggah objek memanggil fungsi. AWS Lambda
Fungsi Lambda menyimpan pemberitahuan peristiwa Amazon S3 dalam log. CloudWatch
Fungsi Lambda memulai mesin AWS Step Functions status.
Mesin status menulis nama objek Amazon S3 ke dalam tabel DynamoDB.
Proses pengujian dalam CI/CD pipeline memverifikasi bahwa nama objek yang diunggah cocok dengan entri dalam tabel DynamoDB. Ini juga memverifikasi bahwa bucket S3 diterapkan dengan nama yang ditentukan dan bahwa AWS Lambda fungsi tersebut telah berhasil diterapkan.
Alat
Layanan AWS
Amazon CloudWatch membantu Anda memantau metrik sumber AWS daya Anda dan aplikasi yang Anda jalankan AWS secara real time.
Amazon DynamoDB adalah layanan database NoSQL yang dikelola sepenuhnya yang menyediakan kinerja yang cepat, dapat diprediksi, dan terukur.
AWS Lambdaadalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.
AWS Step Functionsadalah layanan orkestrasi tanpa server yang membantu Anda menggabungkan AWS Lambda fungsi dan lainnya Layanan AWS untuk membangun aplikasi bisnis yang penting.
Alat lainnya
Docker
adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah. Docker Compose
adalah alat untuk mendefinisikan dan menjalankan aplikasi multi-container. LocalStack
adalah emulator layanan cloud yang berjalan dalam satu wadah. Dengan menggunakan LocalStack, Anda dapat menjalankan beban kerja pada mesin lokal Anda yang menggunakan Layanan AWS, tanpa menghubungkan ke AWS Cloud. Terraform
adalah alat IAc HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal. Tes Terraform
membantu Anda memvalidasi pembaruan konfigurasi modul Terraform melalui pengujian yang analog dengan integrasi atau pengujian unit.
Repositori kode
Kode untuk pola ini tersedia di AWS infrastruktur GitHub Uji menggunakan LocalStack dan repositori Terraform Tests
Praktik terbaik
Solusi ini menguji AWS infrastruktur yang ditentukan dalam file konfigurasi Terraform, dan tidak menyebarkan sumber daya tersebut di file. AWS Cloud Jika Anda ingin menerapkan sumber daya, ikuti prinsip hak istimewa paling sedikit (dokumentasi IAM) dan konfigurasikan backend Terraform (dokumentasi Terraform
) dengan benar. Saat mengintegrasikan LocalStack dalam CI/CD pipeline, kami menyarankan Anda untuk tidak menjalankan wadah LocalStack Docker dalam mode hak istimewa. Untuk informasi selengkapnya, lihat hak istimewa Runtime dan kemampuan Linux
(dokumentasi Docker) dan Keamanan untuk pelari yang dikelola sendiri (dokumentasi). GitLab
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Kloning repositori. | Dalam shell bash, masukkan perintah berikut. Ini mengkloning AWS infrastruktur Test menggunakan LocalStack dan repositori Terraform Tests
| DevOps insinyur |
Jalankan LocalStack wadah. |
| DevOps insinyur |
Inisialisasi Terraform. | Masukkan perintah berikut untuk menginisialisasi Terraform:
| DevOps insinyur |
Jalankan Tes Terraform. |
| DevOps insinyur |
Pembersihan sumber daya | Masukkan perintah berikut untuk menghancurkan LocalStack wadah:
| DevOps insinyur |
Pemecahan Masalah
| Isu | Solusi |
|---|---|
|
|
Sumber daya terkait
Memulai dengan Terraform: Panduan untuk AWS CDK dan para AWS CloudFormation ahli (PanduanAWS Preskriptif)
Praktik terbaik untuk menggunakan AWS Penyedia Terraform (Panduan AWS Preskriptif)
Terraform CI/CD dan pengujian AWS dengan Terraform Test Framework baru
(posting blog)AWS Mempercepat pengiriman perangkat lunak menggunakan LocalStack Cloud Emulator dari AWS Marketplace
(posting AWS blog)
Informasi tambahan
Integrasi dengan GitHub Tindakan
Anda dapat mengintegrasikan LocalStack dan Pengujian Terraform dalam CI/CD pipeline dengan menggunakan GitHub Tindakan. Untuk informasi selengkapnya, lihat dokumentasi GitHub Tindakan
name: LocalStack Terraform Test on: push: branches: - '**' workflow_dispatch: {} jobs: localstack-terraform-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build and Start LocalStack Container run: | docker compose up -d - name: Setup Terraform uses: hashicorp/setup-terraform@v3 with: terraform_version: latest - name: Run Terraform Init and Validation run: | terraform init terraform validate terraform fmt --recursive --check terraform plan terraform show - name: Run Terraform Test run: | terraform test - name: Stop and Delete LocalStack Container if: always() run: docker compose down