Workflow IaC dengan Floci: override endpoint provider AWS untuk plan/apply penuh secara lokal dengan state lokal — dan validasi modul Terraform S3+DynamoDB+Lambda sebelum naik ke staging

Infrastructure as Code mengubah cara tim membangun infrastruktur AWS — tapi juga menciptakan loop umpan balik paling menyebalkan: setiap eksperimen terraform apply menunggu cloud sungguhan, berisiko menabrak environment bersama, dan berpotensi menimbulkan biaya.
Floci menutup loop ini: provider AWS Terraform/OpenTofu diarahkan ke endpoint lokal, sehingga plan dan apply penuh berjalan dalam hitungan detik terhadap emulator. Episode ini membuka FASE 4.
Kunci integrasinya ada di konfigurasi provider:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "us-east-1"
access_key = "floci-local-key"
secret_key = "floci-local-secret"
skip_credentials_validation = true
skip_metadata_api_check = true
skip_requesting_account_id = true
endpoints {
s3 = "http://localhost:4566"
dynamodb = "http://localhost:4566"
lambda = "http://localhost:4566"
sqs = "http://localhost:4566"
sns = "http://localhost:4566"
iam = "http://localhost:4566"
apigateway = "http://localhost:4566"
}
}
resource "aws_s3_bucket" "assets" {
bucket = "tf-app-assets"
}Tiga blok wajib dipahami:
endpoints — arahkan setiap service yang dipakai modul ke floci; service yang tak diarahkan akan menabrak AWS sungguhan (bahaya!).skip_* flags — matikan validasi credentials/account-id yang tidak relevan untuk emulator.terraform init
terraform plan # diff terhadap state lokal + floci
terraform apply -auto-approve
terraform destroy -auto-approve # teardown instan saat eksperimen selesaiState tersimpan lokal (terraform.tfstate) — tanpa remote backend, tanpa lock S3. Untuk penggunaan lab ini itu ideal; jangan commit file state ke git.
Warning
Disiplin penting: pastikan SEMUA service di endpoints mengarah ke localhost sebelum apply. Provider AWS akan diam-diam membuat resource sungguhan untuk service yang lupa diarahkan.
OpenTofu adalah fork open-source Terraform dengan kompatibilitas tinggi — konfigurasi di atas identik, cukup ganti binary (tofu init/plan/apply). Floci bekerja sama baiknya karena yang dites adalah wire protocol AWS, bukan tooling-nya.
Pola kerja tim yang sehat:
Manfaat konkret yang dirasakan tim:
destroy ke emulator tidak menyentuh siapa pun.fmt.Target outline: provision stack lengkap S3+DynamoDB+Lambda ke floci via Terraform.
resource "aws_dynamodb_table" "orders" {
name = "tf-orders"
billing_mode = "PAY_PER_REQUEST"
hash_key = "pk"
attribute {
name = "pk"
type = "S"
}
}
data "archive_file" "fn" {
type = "zip"
source_file = "${path.module}/handler.py"
output_path = "${path.module}/handler.zip"
}
resource "aws_lambda_function" "process" {
function_name = "tf-process-order"
runtime = "python3.12"
handler = "handler.handler"
role = aws_iam_role.fn_role.arn
filename = data.archive_file.fn.output_path
environment {
variables = { TABLE = aws_dynamodb_table.orders.name }
}
}
resource "aws_iam_role" "fn_role" {
name = "tf-fn-role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{ Effect = "Allow", Principal = { Service = "lambda.amazonaws.com" },
Action = "sts:AssumeRole" }]
})
}Perhatikan nilai edukasinya: satu apply membuat tabel, role, fungsi Lambda dengan env var yang merujuk nama tabel via referensi HCL — seluruh dependency graph dievaluasi provider sungguhan, bukan shortcut emulator.
Rangkuman episode ini:
endpoints + skip_* flags; state lokal membuat loop eksperimen instan.Episode 19 melengkapi toolkit IaC: CloudFormation, CDK & Pulumi — satu infrastruktur yang sama dideploy via dua tool berbeda. Sampai jumpa!