Prolog: Kopi, Deadline, dan URL Jelek
Pagi itu, aku duduk di depan laptop, kopi hitam masih panas, dan notifikasi Slack dari bos masuk:
"Bro, URL GraphQL kita masih https://abcd123456.appsync-api.ap-southeast-1.amazonaws.com/graphql, susah dihapal. Bisa diganti jadi api-dev.myapp.svc? Biar tim frontend nggak pusing."
Aku senyum kecut. Dalam hati, "Wah, ini sih tantangan baru. Tapi, siapa takut?" Kopi diseruput, VSCode dibuka, dan petualangan dimulai.
Bab 1: Kenapa Harus Custom Domain?
Dulu, aku pikir URL default AWS itu udah cukup. Tapi makin lama, makin banyak masalah:
Akhirnya, aku sadar: custom domain itu bukan cuma soal estetika, tapi juga soal kemudahan, keamanan, dan profesionalisme.
Bab 2: Peta Jalan (Roadmap) Menuju Domain Idaman
Aku gambar mindmap di kertas:
Bab 3: Delegasi Sub-Domain ke Route 53
(Referensi: AWS Route 53 - Developer Guide)
3.1. Kenapa Nggak Semua di Cloudflare?
Domain utama myapp.com masih di Cloudflare, karena DNS management di situ lebih familiar buat tim. Tapi, AWS CDK nggak bisa otomatis bikin A-record di Cloudflare. Solusinya: sub-domain khusus AWS, misal svc.myapp.com, didelegasikan ke Route 53.
3.2. Step-by-Step
dig +short NS svc.myapp.com
# Output harus: ns-123.awsdns-00.net ...
3.3. Analogi
Bayangin domain utama itu rumah besar, sub-domain itu kamar khusus AWS. Kunci kamar (NS record) kita serahkan ke Route 53, biar AWS bebas atur isinya.
Bab 4: Wildcard Certificate (ACM) — Tiket Masuk Dunia HTTPS
4.1. Kenapa Wildcard?
Karena kita mau satu certificate untuk semua sub-domain: api-dev.myapp.svc, rest-prod.myapp.svc, sandbox-alice.myapp.svc, dst.
4.2. Kenapa us-east-1?
AppSync pakai CloudFront di belakang layar, dan CloudFront cuma mau certificate dari region us-east-1. Kalau REST API (API Gateway), bisa pakai regional certificate.
4.3. Request Certificate
(Referensi: AWS ACM - Request a Public Certificate)
aws acm request-certificate \\
--region us-east-1 \\
--domain-name "*.svc.myapp.com" \\
--validation-method DNS
4.4. Validasi Otomatis
Karena hosted zone sudah di Route 53, tinggal klik "Create record in Route 53" di AWS Console. Tunggu status "Issued".
4.5. Troubleshooting
Bab 5: Konfigurasi AppSync dengan Domain Sendiri
(Referensi: Custom Domain for AWS AppSync)
5.1. CDK Magic
const api = new appsync.GraphqlApi(this, 'Api', {
name: `${env}-myapp-graphql`,
schema: appsync.SchemaFile.fromAsset('schema.graphql'),
domainName: {
domainName: `api-${env}.myapp.svc`,
certificate: wildcardCert,
},
authorizationConfig: {
defaultAuthorization: { authorizationType: appsync.AuthorizationType.API_KEY },
},
});
5.2. Hasil
5.3. Cek di Route 53
A-record otomatis muncul, pointing ke CloudFront distribution AppSync.
5.4. Test
curl -H "x-api-key: ..."
Bab 6: HTTP REST API — Biar Semua Layanan Punya Domain Keren
(Referensi: API Gateway Custom Domain Names)
6.1. Tambah Domain di API Gateway
const httpDomain = new DomainName(this, 'RestDomain', {
domainName: `rest-${env}.myapp.svc`,
certificate: wildcardCert,
});
new ApiMapping(this, 'Mapping', {
api: httpApi,
domainName: httpDomain,
stage: httpApi.defaultStage!,
});
// Helper untuk A-record alias
createDnsRecord(stack, httpApi, { domainName: `rest-${env}.myapp.svc` }, hostedZoneId, httpDomain);
6.2. Test
curl
Bab 7: Sandbox Per Developer — Biar Nggak Saling Injak
7.1. Naming Convention
7.2. Caranya?
Set environment variable MACHINE_NAME sebelum deploy. CDK otomatis prefix semua resource.
7.3. Manfaat
Bab 8: Troubleshooting — Drama DNS dan Certificate
8.1. DNS Propagation
8.2. Certificate Error
8.3. CORS Drama
(Referensi: Enabling CORS for a REST API Resource)
corsPreflight: {
allowOrigins: ['*'],
allowMethods: [CorsHttpMethod.GET, CorsHttpMethod.POST],
}
8.4. CloudFormation Fails
Bab 9: Tips, Anti-Pattern, dan Best Practice
9.1. Tips
9.2. Anti-Pattern
9.3. Best Practice
Bab 10: Refleksi — Apa yang Aku Pelajari
Epilog: Kopi Habis, Domain Keren Sudah Aktif
Akhirnya, setelah 2 jam (dan 2 gelas kopi), semua environment punya domain kece:
Frontend happy, bos happy, aku pun bisa tidur nyenyak. Kalau besok ada request "bisa nggak domain-nya pakai emoji?", aku siapin kopi lagi aja deh.
Appendix: Checklist Cepat
Penutup
Kalau kamu baca sampai sini, selamat! Kamu sudah siap menaklukkan dunia custom domain AWS tanpa drama. Jangan lupa, semua contoh di atas pakai dummy data. Ganti dengan punyamu, dan… selamat ngoprek!