Belajar LocalStack - IaC: CloudFormation, Terraform & SAM
Episode 10 of 23

Belajar LocalStack - IaC: CloudFormation, Terraform & SAM

Mengotomatiskan seluruh infrastruktur dengan Infrastructure as Code: CloudFormation, Terraform dengan backend S3 lokal, template serverless/SAM, serta AWS CDK yang di-deploy ke LocalStack.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 9 kalian membangun API Gateway dengan belasan perintah manual. Efektif untuk belajar, tapi tidak untuk kerja tim: tidak ada jejak audit, tidak ada review, dan sulit direproduksi. Solusinya adalah Infrastructure as Code (IaC) — infrastruktur ditulis sebagai kode yang di-versioning, di-review, dan di-deploy secara deterministik. Karena LocalStack meniru API AWS, hampir semua tool IaC bisa menargetkannya tanpa perubahan berarti.

CloudFormation dengan LocalStack

CloudFormation adalah IaC bawaan AWS: tulis template YAML, deploy sebagai stack, dan biarkan emulator membuat semua resource. Mulai dari template berisi bucket S3 dan tabel DynamoDB:

stack.yml
AWSTemplateFormatVersion: "2010-09-09"
Resources:
  DataBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: "data-bucket"
  OrdersTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: "Orders"
      AttributeDefinitions:
        - AttributeName: "id"
          AttributeType: "S"
      KeySchema:
        - AttributeName: "id"
          KeyType: "HASH"
      BillingMode: "PAY_PER_REQUEST"
Outputs:
  BucketArn:
    Value: !GetAtt DataBucket.Arn
Deploy stack CloudFormation
awslocal cloudformation create-stack \
  --stack-name dev-stack --template-body file://stack.yml
awslocal cloudformation describe-stacks --stack-name dev-stack
awslocal s3 ls
awslocal dynamodb list-tables

Semua resource yang dibuat otomatis muncul sebagai service terpisah di LocalStack — bucket dan tabel benar-benar berfungsi, bukan sekadar catatan stack.

Kekuatan CloudFormation ada pada referensi antar resource. Fungsi intrinsic seperti !Ref dan !GetAtt mengalirkan output satu resource ke resource lain. Fragmen template ini mengirim nama bucket ke environment variable Lambda:

stack-lambda.yml
AWSTemplateFormatVersion: "2010-09-09"
Resources:
  DataBucket:
    Type: AWS::S3::Bucket
  Handler:
    Type: AWS::Lambda::Function
    Properties:
      Runtime: python3.12
      Handler: handler.handler
      Role: arn:aws:iam::000000000000:role/lambda-role
      Code:
        ZipFile: |
          def handler(event, context): return {"statusCode": 200}
      Environment:
        Variables:
          BUCKET: !Ref DataBucket

Warning

Template dengan sintaks interpolation seperti !Ref harus selalu berada di dalam fenced code block MDX. Menuliskannya di paragraf biasa merusak rendering — berlaku untuk seluruh episode ini.

Terraform: Provider & Backend S3 Lokal

Terraform mengelola infrastruktur dengan bahasa deklaratif HCL. Provider AWS diarahkan ke LocalStack dengan override endpoint di blok provider:

main.tf
provider "aws" {
  region     = "us-east-1"
  access_key = "test"
  secret_key = "test"
  skip_credentials_validation = true
  skip_metadata_api_check     = true
  endpoints {
    s3       = "http://localhost:4566"
    dynamodb = "http://localhost:4566"
  }
}
resource "aws_s3_bucket" "data" {
  bucket = "tf-data-bucket"
}

Kredensial test/test dan endpoint http://localhost:4566 adalah satu-satunya yang berbeda dari produksi. State Terraform bisa disimpan di backend S3 yang juga berjalan di LocalStack:

backend.tf
terraform {
  backend "s3" {
    bucket                      = "tf-state"
    key                         = "localstack/terraform.tfstate"
    region                      = "us-east-1"
    endpoint                    = "http://localhost:4566"
    access_key                  = "test"
    secret_key                  = "test"
    skip_credentials_validation = true
    skip_region_validation      = true
    skip_requesting_account_id  = true
    force_path_style            = true
  }
}
Siklus Terraform ke LocalStack
awslocal s3 mb s3://tf-state
terraform init
terraform plan
terraform apply -auto-approve
terraform destroy -auto-approve

Template Serverless / SAM

AWS SAM menyederhanakan serverless: satu fungsi Lambda ditulis ringkas, dan SAM menyisipkan sisanya (permission, event source). Template SAM standar:

template.yaml
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Resources:
  HelloFunction:
    Type: AWS::Serverless::Function
    Properties:
      Runtime: python3.12
      Handler: app.handler
      InlineCode: |
        def handler(event, context): return {"statusCode": 200, "body": "ok"}
Deploy SAM ke LocalStack
samlocal build
samlocal deploy --guided --capabilities CAPABILITY_IAM

AWS CDK: Synth & Deploy ke LocalStack

AWS CDK menulis infrastruktur dalam bahasa pemrograman (TypeScript, Python, dan lainnya) lalu mengompilasinya menjadi CloudFormation:

JSlib/app-stack.ts
import * as cdk from "aws-cdk-lib";
import * as s3 from "aws-cdk-lib/aws-s3";
import { Construct } from "constructs";
export class AppStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    new s3.Bucket(this, "DataBucket", { bucketName: "cdk-data-bucket" });
  }
}
const app = new cdk.App();
new AppStack(app, "AppStack", { env: { region: "us-east-1", account: "000000000000" } });

Untuk menargetkan LocalStack, gunakan cdklocal — pasangan CDK CLI yang mengarahkan bootstrap dan deploy ke endpoint emulator:

Synth dan deploy CDK ke LocalStack
npm install -g aws-cdk-local aws-cdk
cdklocal bootstrap
cdklocal synth
cdklocal deploy
awslocal s3 ls

cdklocal bootstrap membuat bucket staging khusus CDK, lalu deploy menciptakan semua resource. Output synth berupa template CloudFormation — bukti bahwa CDK adalah abstraksi di atas CloudFormation.

Penutup

Rangkuman episode ini:

  • CloudFormation: tulis template YAML, deploy dengan awslocal cloudformation create-stack.
  • Terraform: override endpoint provider ke http://localhost:4566, simpan state di backend S3 lokal.
  • SAM: samlocal build lalu samlocal deploy menerjemahkan template serverless menjadi stack.
  • AWS CDK: cdklocal bootstrap lalu cdklocal deploy untuk infrastruktur berbasis bahasa pemrograman.
  • Template dengan interpolation seperti !Ref hanya boleh ditulis di dalam fenced code block.

Infrastruktur kalian kini didefinisikan sebagai kode dan bisa direproduksi kapan pun. Di episode 11 kita simpan dan kelola konfigurasi dan rahasia dengan Secrets Manager dan SSM Parameter Store. Sampai jumpa!

Belajar LocalStack - IaC: CloudFormation, Terraform & SAM | Belajar LocalStack