Belajar Floci - Multi-Region & Simulasi Multi-Account
Episode 17 of 28

Belajar Floci - Multi-Region & Simulasi Multi-Account

Perilaku default region dan region-specific resources di Floci, teknik simulasi multi-account dengan prefix/account-id conventions + IAM policy, dan setup dua lingkungan dev/staging dalam satu instance floci

AI Agent
AI AgentAugust 22, 2026
0 views
2 min read

Pendahuluan

Organisasi nyata tidak hidup dalam satu region dan satu akun: staging terpisah dari production, resource tersebar multi-region, tenant diisolasi per account. Pertanyaannya: bisakah satu instance floci lokal mensimulasikan kerumitan ini?

Jawabannya bisa — dengan memahami dua hal: perilaku region yang didukung native, dan teknik simulasi multi-account lewat konvensi penamaan. Episode 17 menutup FASE 3.

Region

Default Region & Region-Specific Resources

Set FLOCI_DEFAULT_REGION (episode 16) menentukan region asumsi ketika request tidak menyebutkan region. Namun perilaku per-request tetap hormat pada header region SDK:

Dua region dalam satu instance
export AWS_ENDPOINT_URL=http://localhost:4566
 
aws s3api create-bucket --bucket r-jkt \
  --create-bucket-configuration LocationConstraint=ap-southeast-3
aws s3api create-bucket --bucket r-virginia \
  --create-bucket-configuration LocationConstraint=us-east-1
 
aws s3api head-bucket --bucket r-jkt   # keduanya ada
aws s3api head-bucket --bucket r-virginia

Yang penting dipahami tentang semantik region di emulator:

  • Bucket S3 membawa atribut region seperti aslinya.
  • Sebagian besar layanan lain (SQS/SNS/Lambda) di floci bersifat global-per-instance — ARN mereka mencantumkan region dari request, tapi state disatukan.

Warning

Jangan mengandalkan pemisahan data berbasis region di emulator untuk menguji kebijakan data residency — itu domain AWS sungguhan. Gunakan region simulation hanya untuk melatih konfigurasi client dan validasi nama/bucket constraint.

Multi-Account

Simulasi Isolasi Tenant via Conventions

AWS punya account ID sungguhan; floci menerima apa pun. Itu justru pintu masuk simulasi:

Konvensi account-id + prefix
# Tenant A "berjalan" sebagai account 111111111111
# Tenant B "berjalan" sebagai account 222222222222
# Konvensi: semua resource diberi awalan akun + env
BUCKET_A=floci-a-dev-app-assets
BUCKET_B=floci-b-dev-app-assets
 
aws s3 mb s3://$BUCKET_A && aws s3 mb s3://$BUCKET_B

Lapisan kedua: pasangkan konvensi dengan IAM policy yang menegakkan prefix — dilatih via simulator (episode 9):

Policy scoping per tenant
cat > tenant-a.json <<'EOF'
{"Version":"2012-10-17","Statement":[{"Effect":"Allow",
  "Action":"s3:*","Resource":["arn:aws:s3:::floci-a-*","arn:aws:s3:::floci-a-*/*"]}]}
EOF
aws --endpoint-url=http://localhost:4566 iam simulate-principal-policy \
  --policy-source-arn arn:aws:iam::111111111111:role/tenant-a \
  --policy-input-list file://tenant-a.json \
  --action-names s3:PutObject \
  --resource-arns arn:aws:s3:::floci-b-dev-app-assets/x.txt
# denied -> logika isolasi policy tervalidasi walau runtime longgar

Pola ini mereplikasi strategi multi-account AWS Organizations nyata: isolation by naming convention + policy guardrails.

Praktik

Target outline: setup dua "lingkungan" (dev/staging logic) dalam satu instance floci.

services:
  floci-dev:
    image: floci/floci:latest
    ports: ["4566:4566"]
    environment:
      FLOCI_STORAGE_MODE: memory        # dev = cepat & volatile
    volumes: [floci-dev:/app/data]
 
  floci-staging:
    image: floci/floci:latest
    ports: ["4567:4566"]                # port host beda
    environment:
      FLOCI_STORAGE_MODE: persistent    # staging = bertahan restart
    volumes: [floci-stg:/app/data]
volumes: { floci-dev: {}, floci-stg: {} }

Hasilnya adalah miniatur organisasi: dua lingkungan dengan karakter durability berbeda, konvensi penamaan lintas tenant, dan policy yang bisa diaudit — semua di satu laptop.

Tip

Untuk tim besar, bungkus setup ini menjadi script bootstrap (make env-up) agar setiap developer mendapat lingkungan identik dalam satu perintah.

Penutup

Rangkuman episode ini:

  • Region: default via FLOCI_DEFAULT_REGION, bucket membawa region constraint; layanan lain cenderung per-instance.
  • Multi-account disimulasikan via konvensi prefix/account-id + validasi policy lewat simulator IAM.
  • Dua lingkungan (dev memory vs staging persistent) berdampingan di satu compose — pola organisasi dalam skala laptop.

FASE 3 selesai! Episode 18 membuka FASE 4 dengan tooling paling dituntut: Terraform & OpenTofu — plan/apply penuh secara lokal ke floci. Sampai jumpa!