Uji AWS infrastruktur dengan menggunakan LocalStack dan Tes Terraform - AWS Prescriptive Guidance

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 dengan. LocalStack Kontainer LocalStack Docker menyediakan lingkungan pengembangan lokal yang mengemulasi berbagai. Layanan AWS Ini membantu Anda menguji dan mengulangi penerapan infrastruktur tanpa menimbulkan biaya di. AWS Cloud

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

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

CI/CD Pipeline membangun dan menguji container LocalStack Docker dan sumber daya AWS.

Diagram menunjukkan alur kerja berikut:

  1. Anda menambahkan dan mengkomit file konfigurasi Terraform ke repositori kode sumber.

  2. 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.

  3. Pipeline mengunggah objek ke bucket Amazon S3 yang di-host di container Docker LocalStack .

  4. Mengunggah objek memanggil fungsi. AWS Lambda

  5. Fungsi Lambda menyimpan pemberitahuan peristiwa Amazon S3 dalam log. CloudWatch

  6. Fungsi Lambda memulai mesin AWS Step Functions status.

  7. Mesin status menulis nama objek Amazon S3 ke dalam tabel DynamoDB.

  8. 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.

  • LocalStackadalah 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

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Kloning repositori.

Dalam shell bash, masukkan perintah berikut. Ini mengkloning AWS infrastruktur Test menggunakan LocalStack dan repositori Terraform Tests dari: GitHub

git clone https://github.com/aws-samples/localstack-terraform-test.git
DevOps insinyur

Jalankan LocalStack wadah.

  1. Masukkan perintah berikut untuk menavigasi ke repositori kloning:

    cd localstack-terraform-test
  2. Masukkan perintah berikut untuk memulai wadah LocalStack Docker dalam mode terpisah:

    docker-compose up -d
  3. Tunggu hingga wadah LocalStack Docker beroperasi.

DevOps insinyur

Inisialisasi Terraform.

Masukkan perintah berikut untuk menginisialisasi Terraform:

terraform init
DevOps insinyur

Jalankan Tes Terraform.

  1. Masukkan perintah berikut untuk menjalankan Tes Terraform:

    terraform test
  2. Verifikasi bahwa semua tes berhasil diselesaikan. Output harus serupa dengan yang berikut ini:

    Success! 3 passed, 0 failed.
DevOps insinyur

Pembersihan sumber daya

Masukkan perintah berikut untuk menghancurkan LocalStack wadah:

docker-compose down
DevOps insinyur

Pemecahan Masalah

IsuSolusi

Error: reading DynamoDB Table Item (Files|README.md): emptyhasil saat menjalankan terraform test perintah.

  1. Masukkan kembali terraform test perintah.

  2. Jika itu tidak menyelesaikan kesalahan, edit file.tf utama untuk meningkatkan batas waktu tidur ke nilai lebih dari 15 detik:

    resource "time_sleep" "wait" { create_duration = "15s" triggers = { s3_object = local.key_json } }

Sumber daya terkait

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. Berikut ini adalah contoh file konfigurasi 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