Cara Menghentikan Tagihan Elastic IP AWS yang Terus Berjalan Meski EC2 Sudah Dimatikan
Kamu mematikan EC2 instance, merasa sudah aman, lalu tagihan AWS bulan berikutnya tetap ada biaya Elastic IP. Ini bukan bug — ini adalah perilaku yang didokumentasikan AWS, tapi sering kali mengejutkan engineer yang baru pertama kali menghadapinya. Artikel ini menjelaskan kapan Elastic IP dikenakan biaya, perbedaan antara Disassociate dan Release, dan langkah eksak untuk menghentikan tagihan tersebut.
TL;DR: Kapan Elastic IP Dikenakan Biaya?
AWS mengenakan biaya per jam untuk Elastic IP yang dialokasikan ke akun kamu tapi tidak sedang digunakan secara aktif. 'Tidak digunakan' berarti salah satu dari kondisi berikut terpenuhi.
| Kondisi Elastic IP | Dikenakan Biaya? |
|---|---|
| Terhubung ke EC2 instance yang sedang running | Tidak (gratis) |
| Dialokasikan tapi tidak terhubung ke resource apapun | Ya |
| Terhubung ke EC2 instance yang sedang stopped | Ya |
| Terhubung ke network interface yang tidak terpasang ke instance | Ya |
| Sudah di-Release dari akun | Tidak |
Intinya: mematikan instance tidak cukup. Selama Elastic IP masih dialokasikan ke akun dan instance dalam kondisi stopped, biaya tetap berjalan.
Bagaimana Elastic IP Bekerja — Fondasi yang Harus Dipahami
Elastic IP Address (EIP) adalah alamat IPv4 publik statis yang dialokasikan ke akun AWS kamu, bukan ke instance secara langsung. Siklus hidupnya terdiri dari dua operasi yang sering disalahpahami sebagai satu hal yang sama.
- Allocate — EIP dicadangkan dari pool AWS dan masuk ke akun kamu. Biaya mulai berjalan jika EIP tidak segera diasosiasikan ke instance yang running.
- Associate — EIP dihubungkan ke EC2 instance atau network interface. Selama instance running, tidak ada biaya tambahan untuk EIP.
- Disassociate — EIP dilepas dari instance, tapi masih ada di akun kamu. EIP kembali ke status 'idle' dan biaya per jam mulai berjalan lagi.
- Release — EIP dikembalikan ke pool AWS dan dihapus dari akun. Biaya berhenti sepenuhnya. Alamat IP ini tidak bisa diklaim kembali.
Stopping instance tidak menjalankan operasi Disassociate secara otomatis. EIP tetap terhubung ke instance, tapi karena instance tidak running, AWS menghitung kondisi ini sebagai 'EIP tidak digunakan secara aktif' dan mengenakan biaya.
Bayangkan EIP seperti nomor telepon yang kamu sewa. Kalau kamu matikan HP-nya tapi nomor itu masih terdaftar atas namamu, kamu tetap bayar sewa nomor tersebut. Release adalah tindakan mengembalikan nomor ke operator.
Langkah Eksak Menghentikan Tagihan Elastic IP
Ada dua jalur tergantung apakah kamu masih butuh IP tersebut atau tidak. Tentukan dulu sebelum bertindak — setelah Release, alamat IP tidak bisa diklaim kembali.
Jalur A: Tidak Butuh IP Lagi — Disassociate lalu Release
Ini jalur yang paling bersih dan satu-satunya cara untuk benar-benar menghentikan tagihan EIP.
Langkah 1: Identifikasi semua Elastic IP yang idle di akun kamu
Sebelum melakukan apapun, audit dulu kondisi semua EIP. Instance yang stopped tetap menampilkan EIP sebagai 'associated', tapi statusnya tetap menghasilkan biaya. Perintah berikut menampilkan semua EIP beserta status asosiasinya.
aws ec2 describe-addresses \
--query 'Addresses[*].{AllocationId:AllocationId,PublicIp:PublicIp,InstanceId:InstanceId,AssociationId:AssociationId,Domain:Domain}' \
--output table \
--region us-east-1
Perhatikan kolom InstanceId dan AssociationId. EIP yang idle (tidak terhubung ke resource apapun) akan menampilkan nilai kosong di kedua kolom tersebut. EIP yang terhubung ke stopped instance akan menampilkan InstanceId tapi instance tersebut dalam kondisi stopped.
Langkah 2: Verifikasi status instance yang terhubung ke EIP
Jangan langsung Release EIP yang masih terhubung ke instance. Cek dulu status instance-nya untuk memastikan kamu tidak melepas EIP dari instance yang sedang dibutuhkan.
aws ec2 describe-instances \
--instance-ids i-0123456789abcdef0 \
--query 'Reservations[*].Instances[*].{InstanceId:InstanceId,State:State.Name,PublicIpAddress:PublicIpAddress}' \
--output table \
--region us-east-1
Langkah 3: Disassociate EIP dari instance
Operasi ini melepas EIP dari instance. Instance tidak perlu dalam kondisi running untuk melakukan Disassociate. Gunakan AssociationId yang didapat dari Langkah 1.
aws ec2 disassociate-address \
--association-id eipassoc-0123456789abcdef0 \
--region us-east-1
Setelah perintah ini berhasil, EIP masih ada di akun kamu dalam kondisi idle. Biaya per jam tetap berjalan sampai kamu menjalankan Release.
Langkah 4: Release EIP dari akun
Ini adalah langkah yang benar-benar menghentikan tagihan. Gunakan AllocationId dari Langkah 1.
aws ec2 release-address \
--allocation-id eipalloc-0123456789abcdef0 \
--region us-east-1
Setelah Release berhasil, EIP tidak lagi muncul di describe-addresses dan tagihan berhenti. Alamat IP publik tersebut kembali ke pool AWS — tidak ada jaminan kamu bisa mendapatkan alamat yang sama lagi jika mengalokasikan EIP baru.
Jalur B: Masih Butuh IP — Pastikan Instance Running
Jika kamu butuh mempertahankan alamat IP yang sama (misalnya untuk DNS record atau whitelist firewall klien), satu-satunya cara agar EIP tidak dikenakan biaya adalah memastikan EIP tersebut terhubung ke instance yang sedang running.
Tidak ada cara untuk 'menyimpan' EIP tanpa biaya saat instance stopped. Ini adalah trade-off yang harus diperhitungkan dalam arsitektur.
Untuk memverifikasi bahwa EIP sudah terhubung ke instance yang running dan tidak menghasilkan biaya:
aws ec2 describe-addresses \
--allocation-ids eipalloc-0123456789abcdef0 \
--query 'Addresses[*].{PublicIp:PublicIp,InstanceId:InstanceId,AssociationId:AssociationId}' \
--output table \
--region us-east-1
Pengalaman Nyata: Salah Diagnosis yang Sering Terjadi
Skenario yang paling sering terjadi: engineer menghentikan instance untuk menghemat biaya, melihat biaya EC2 turun di Cost Explorer, tapi total tagihan tidak turun sebanyak yang diharapkan. Asumsi pertama biasanya 'ada instance lain yang masih running' atau 'ada data transfer yang tidak terduga'.
Yang sebenarnya terjadi: EIP yang terhubung ke stopped instance tidak muncul sebagai line item yang mencolok di Cost Explorer secara default. Biayanya masuk ke kategori EC2-Other atau ElasticIP:IdleAddress tergantung bagaimana filter diterapkan.
Cara mendeteksinya langsung:
aws ce get-cost-and-usage \
--time-period Start=2024-01-01,End=2024-01-31 \
--granularity MONTHLY \
--filter '{"Dimensions":{"Key":"USAGE_TYPE_GROUP","Values":["EC2: Elastic IP Addresses"]}}' \
--metrics BlendedCost \
--region us-east-1
Jika output menampilkan biaya di sana, kamu punya EIP idle. Jalankan describe-addresses dan audit satu per satu.
Perbaikan yang benar bukan mematikan instance dengan cara berbeda — melainkan Release EIP yang tidak aktif digunakan.
Membersihkan Semua EIP Idle Sekaligus
Untuk akun yang sudah lama berjalan dan mungkin memiliki banyak EIP idle, skrip berikut mengidentifikasi semua EIP yang tidak memiliki asosiasi aktif. Jalankan describe-addresses dulu dan review hasilnya sebelum melakukan Release massal.
🔽 Klik untuk melihat skrip audit EIP idle
# Tampilkan semua EIP yang tidak terhubung ke resource apapun
aws ec2 describe-addresses \
--query 'Addresses[?AssociationId==null].{AllocationId:AllocationId,PublicIp:PublicIp,Domain:Domain}' \
--output table \
--region us-east-1
# Untuk setiap AllocationId yang muncul di output di atas,
# jalankan perintah berikut satu per satu setelah verifikasi manual:
# aws ec2 release-address --allocation-id eipalloc-XXXXXXXXXXXXXXXXX --region us-east-1
Jangan otomasi Release tanpa review manual terlebih dahulu. EIP yang tampak idle mungkin sengaja disiapkan untuk asosiasi ke instance baru yang belum dibuat.
IAM Permission yang Dibutuhkan
Untuk menjalankan semua perintah di atas, IAM principal kamu membutuhkan permission berikut. Terapkan prinsip least privilege — batasi ke resource yang relevan jika memungkinkan, meskipun beberapa action Read/Describe memerlukan Resource: "*".
🔽 Klik untuk melihat IAM policy minimal
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DescribeEIPAndInstances",
"Effect": "Allow",
"Action": [
"ec2:DescribeAddresses",
"ec2:DescribeInstances"
],
"Resource": "*"
},
{
"Sid": "ManageEIP",
"Effect": "Allow",
"Action": [
"ec2:DisassociateAddress",
"ec2:ReleaseAddress"
],
"Resource": "*"
}
]
}
Catatan: ec2:DescribeAddresses dan ec2:DescribeInstances adalah Read action yang tidak mendukung resource-level restriction — keduanya memerlukan Resource: "*". Verifikasi di AWS Service Authorization Reference jika kamu perlu memperketat policy lebih lanjut.
Mencegah Tagihan EIP Tidak Terduga di Masa Depan
Beberapa pendekatan operasional yang umum digunakan untuk menghindari EIP idle:
- AWS Cost Anomaly Detection — Aktifkan alert untuk lonjakan biaya di kategori EC2. EIP idle biasanya menghasilkan biaya kecil tapi konsisten yang mudat terdeteksi sebagai anomali jika threshold diset dengan tepat.
- AWS Config Rule — Rule
eip-attachedyang tersedia di AWS Config dapat mendeteksi EIP yang tidak terhubung ke instance running dan melaporkannya sebagai non-compliant resource. - Tag dan audit rutin — Beri tag pada setiap EIP dengan informasi owner dan purpose. EIP tanpa tag yang jelas adalah kandidat untuk di-audit dan di-release.
Wrap-Up: Menghentikan Tagihan Elastic IP AWS
Untuk benar-benar menghentikan tagihan Elastic IP, kamu harus melakukan Release — bukan hanya Disassociate, dan bukan hanya mematikan instance. Urutan operasinya: Disassociate terlebih dahulu jika EIP masih terhubung ke instance, kemudian Release untuk mengembalikan IP ke pool AWS dan menghentikan biaya sepenuhnya.
Jika kamu butuh mempertahankan alamat IP yang sama, satu-satunya opsi tanpa biaya tambahan adalah memastikan EIP terhubung ke instance yang running. Tidak ada mekanisme 'reserved without charge' untuk EIP saat instance stopped.
Untuk referensi lengkap tentang model penagihan Elastic IP, lihat dokumentasi resmi AWS: Amazon EC2 On-Demand Pricing dan Elastic IP Addresses — AWS Documentation.
Glossary: Istilah Kunci
| Istilah | Penjelasan |
|---|---|
| Elastic IP (EIP) | Alamat IPv4 publik statis yang dialokasikan ke akun AWS, bukan ke instance secara langsung. |
| Allocate | Operasi mencadangkan EIP dari pool AWS ke akun kamu. Biaya mulai berjalan jika EIP tidak segera digunakan. |
| Associate | Operasi menghubungkan EIP ke EC2 instance atau network interface. |
| Disassociate | Operasi melepas EIP dari instance. EIP masih ada di akun dan biaya tetap berjalan. |
| Release | Operasi mengembalikan EIP ke pool AWS. EIP dihapus dari akun dan biaya berhenti sepenuhnya. |
| AllocationId | Identifier unik EIP dalam akun AWS, format eipalloc-XXXXXXXXXXXXXXXXX. Digunakan untuk operasi Release. |
Komentar
Posting Komentar