Panduan Cost Explorer untuk AWS Costs GiMail
Fitur AWS Costs di GiMail menyimpan snapshot biaya AWS harian dari AWS Cost Explorer. Data ini membantu client memantau total biaya AWS yang keluar, bukan hanya biaya SES.
GiMail membaca data biaya lewat AWS Cost Explorer API menggunakan metric
UnblendedCost, granularityDAILY, dan scopeall_services. Snapshot biaya dan kurs USD ke IDR otomatis diambil satu kali per hari pada jam 05:00.
1. Prasyarat
- Akun AWS client sudah memiliki akses ke Billing and Cost Management.
- Cost Explorer sudah aktif di akun AWS tersebut.
- User IAM billing memiliki permission minimal untuk membaca biaya.
- Credential yang dipakai adalah credential IAM API, bukan credential SMTP SES.
2. Buat IAM Policy Minimal
Buka AWS Console, masuk ke IAM, lalu buat policy baru. Gunakan permission minimal berikut agar GiMail hanya bisa membaca data biaya lewat Cost Explorer.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ce:GetCostAndUsage"
],
"Resource": "*"
}
]
}
Permission ce:GetCostAndUsage dipakai untuk mengambil metrik cost dan usage dari AWS Cost Explorer. GiMail tidak membutuhkan permission untuk membuat, mengubah, atau menghapus resource AWS.
3. Buat IAM User Billing
- Buka AWS Console.
- Masuk ke IAM lalu pilih Users.
- Buat user baru, misalnya
gimail-cost-reader. - Attach policy minimal yang sudah dibuat pada langkah sebelumnya.
- Buka tab Security credentials user tersebut.
- Buat Access key untuk akses programmatic.
- Simpan Access key ID dan Secret access key dengan aman.
AWS hanya menampilkan secret access key saat key dibuat. Jika secret key hilang, buat access key baru dan nonaktifkan key lama.
4. Isi Credential di GiMail
Masuk ke dashboard GiMail, lalu buka Pengaturan SES. Pada bagian Credential Cost Explorer, isi field berikut:
- Access key ID billing: isi dengan access key IAM billing.
- Secret access key billing: isi dengan secret key IAM billing.
Bagian ini terpisah dari Credential SMTP SES. Credential SMTP tetap dipakai untuk pengiriman email, sedangkan credential Cost Explorer hanya dipakai untuk membaca biaya AWS.
5. Jadwal Pengambilan Biaya
GiMail menjalankan command berikut setiap hari jam 05:00 waktu aplikasi.
php artisan gimail:fetch-currency-rates
php artisan gimail:fetch-aws-costs
Command biaya mengambil biaya tanggal kemarin, lalu menyimpannya ke tabel aws_cost_snapshots. Command kurs mengambil nilai USD ke IDR hari ini, lalu menyimpannya ke tabel currency_rates. Sistem menjaga agar satu client hanya memiliki satu snapshot untuk satu tanggal, dan satu kurs hanya tersimpan satu kali per tanggal.
6. Melihat Rincian Biaya
Buka menu AWS Costs di sidebar admin atau akses URL berikut:
/admin/aws-costs
Halaman ini menampilkan:
- Total biaya AWS bulan ini.
- Total biaya AWS bulan ini dalam IDR.
- Total biaya AWS bulan lalu.
- Kurs rupiah hari ini.
- Tanggal snapshot terakhir.
- Tabel biaya harian dari Cost Explorer dalam USD dan IDR.
- Status credential Cost Explorer jika belum diisi.
7. Catatan Biaya API
AWS Cost Explorer API dapat dikenakan biaya per request. Karena itu GiMail tidak memanggil API setiap halaman dibuka. Data biaya diambil satu kali sehari, disimpan di database, lalu halaman AWS Costs membaca data dari database lokal.
8. Troubleshooting
AccessDeniedException
Pastikan IAM user memiliki permission ce:GetCostAndUsage dan akun AWS memiliki akses Billing yang sesuai.
InvalidSignatureException
Pastikan credential yang diisi adalah AWS IAM access key dan secret access key, bukan SMTP username/password SES.
Data masih kosong
Pastikan credential Cost Explorer sudah tersimpan, scheduler Laravel berjalan, dan command gimail:fetch-aws-costs berhasil dijalankan. Cost Explorer juga dapat membutuhkan waktu sebelum data biaya terbaru tersedia.
