

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
<a name="test-aws-infra-localstack-terraform"></a>

*Ivan Girardi dan Ioannis Kalyvas, Amazon Web Services*

## Ringkasan
<a name="test-aws-infra-localstack-terraform-summary"></a>

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](https://developer.hashicorp.com/terraform/language/tests) dengan. [LocalStack](https://github.com/localstack/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 menyebarkan 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.](https://developer.hashicorp.com/terraform/language/files) 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
<a name="test-aws-infra-localstack-terraform-prereqs"></a>

**Prasyarat**
+ [Instal](https://docs.docker.com/get-started/get-docker/) Docker
+ [Aktifkan akses](https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option) ke soket Docker default (`/var/run/docker.sock`). Lihat informasi yang lebih lengkap dalam [dokumentasi LocalStack ](https://docs.localstack.cloud/user-guide/aws/lambda/#migrating-to-lambda-v2).
+ [Instal](https://docs.docker.com/compose/install/) Docker Compose
+ [Instal](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) Terraform versi 1.6.0 atau yang lebih baru
+ [Instal](https://developer.hashicorp.com/terraform/cli) Terraform CLI
+ [Konfigurasikan](https://hashicorp.github.io/terraform-provider-aws/) Penyedia Terraform AWS 
+ (Opsional) [Instal](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) dan [konfigurasikan](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) 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](https://github.com/aws-samples/localstack-terraform-test).

**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](https://hub.docker.com/r/localstack/localstack-pro).
+ LocalStack menyediakan layanan emulasi untuk yang berbeda AWS APIs. Untuk daftar lengkapnya, lihat [Cakupan Fitur AWS Layanan](https://docs.localstack.cloud/user-guide/aws/feature-coverage/). Beberapa fitur canggih mungkin memerlukan langganan untuk LocalStack Pro.

## Arsitektur
<a name="test-aws-infra-localstack-terraform-architecture"></a>

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.](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/34bfbdbf-14e7-42a0-9022-c85a9c30cdcd/images/dc61fac9-b92c-4841-9132-ff8bb865eed9.png)


Diagram menunjukkan alur kerja berikut:

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

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

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

1. Mengunggah objek memanggil fungsi. AWS Lambda 

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

1. Fungsi Lambda memulai mesin AWS Step Functions status.

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

1. 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
<a name="test-aws-infra-localstack-terraform-tools"></a>

**Layanan AWS**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) membantu Anda memantau metrik sumber AWS daya Anda dan aplikasi yang Anda jalankan AWS secara real time.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) adalah layanan database NoSQL yang dikelola sepenuhnya yang menyediakan kinerja yang cepat, dapat diprediksi, dan terukur.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)adalah layanan orkestrasi tanpa server yang membantu Anda menggabungkan AWS Lambda fungsi dan lainnya Layanan AWS untuk membangun aplikasi bisnis yang penting.

**Alat-alat lainnya**
+ [Docker](https://www.docker.com/) adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah.
+ [Docker Compose](https://docs.docker.com/compose/) adalah alat untuk mendefinisikan dan menjalankan aplikasi multi-container.
+ [LocalStack](https://localstack.cloud)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](https://www.terraform.io/) adalah alat IAc HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.
+ [Tes Terraform](https://developer.hashicorp.com/terraform/language/tests) 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](https://github.com/aws-samples/localstack-terraform-test).

## Praktik terbaik
<a name="test-aws-infra-localstack-terraform-best-practices"></a>
+ 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) [Terraform (dokumentasi Terraform](https://developer.hashicorp.com/terraform/language/backend)) 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](https://docs.docker.com/engine/containers/run/#runtime-privilege-and-linux-capabilities) (dokumentasi Docker) dan [Keamanan untuk pelari yang dikelola sendiri](https://docs.gitlab.com/runner/security/) (dokumentasi). GitLab 

## Epik
<a name="test-aws-infra-localstack-terraform-epics"></a>

### Terapkan solusinya
<a name="deploy-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Dalam shell bash, masukkan perintah berikut. Ini mengkloning [AWS infrastruktur Test menggunakan LocalStack dan repositori Terraform Tests](https://github.com/aws-samples/localstack-terraform-test) dari: GitHub<pre>git clone https://github.com/aws-samples/localstack-terraform-test.git</pre> | DevOps insinyur | 
| Jalankan LocalStack wadah. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/test-aws-infra-localstack-terraform.html) | DevOps insinyur | 
| Inisialisasi Terraform. | Masukkan perintah berikut untuk menginisialisasi Terraform:<pre>terraform init</pre> | DevOps insinyur | 
| Jalankan Tes Terraform. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/test-aws-infra-localstack-terraform.html) | DevOps insinyur | 
| Pembersihan sumber daya  | Masukkan perintah berikut untuk menghancurkan LocalStack wadah:<pre>docker-compose down</pre> | DevOps insinyur | 

## Pemecahan masalah
<a name="test-aws-infra-localstack-terraform-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| `Error: reading DynamoDB Table Item (Files\|README.md): empty`hasil saat menjalankan `terraform test` perintah. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/test-aws-infra-localstack-terraform.html) | 

## Sumber daya terkait
<a name="test-aws-infra-localstack-terraform-resources"></a>
+ [Memulai dengan Terraform: Panduan untuk AWS CDK dan para AWS CloudFormation ahli (Panduan](https://docs.aws.amazon.com/prescriptive-guidance/latest/getting-started-terraform/introduction.html)AWS Preskriptif)
+ [Praktik terbaik untuk menggunakan AWS Penyedia Terraform](https://docs.aws.amazon.com/prescriptive-guidance/latest/terraform-aws-provider-best-practices/introduction.html) (Panduan AWS Preskriptif)
+ [Terraform CI/CD dan pengujian AWS dengan Terraform Test Framework baru](https://aws.amazon.com/blogs/devops/terraform-ci-cd-and-testing-on-aws-with-the-new-terraform-test-framework/) (posting blog)AWS 
+ [Mempercepat pengiriman perangkat lunak menggunakan LocalStack Cloud Emulator dari AWS Marketplace](https://aws.amazon.com/blogs/awsmarketplace/accelerating-software-delivery-localstack-cloud-emulator-aws-marketplace/) (posting AWS blog)

## Informasi tambahan
<a name="test-aws-infra-localstack-terraform-additional"></a>

**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](https://docs.github.com/en/actions). 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
```