Log in to leave a comment
No posts yet
Saya mengerti betul rasanya jantung yang berdebar setiap kali melihat tagihan Amazon S3. Bagi seorang data engineer, S3 sudah seperti udara yang dihirup setiap hari, namun saat melakukan pengujian dengan puluhan ribu pemanggilan API dan memindahkan file berukuran besar, biaya operasional bisa membengkak jauh lebih besar daripada manfaatnya. Per tahun 2025, biaya penyimpanan S3 Standard adalah 0,023 USD per GB, tetapi yang benar-benar menakutkan adalah biaya transfer data (Egress). Begitu melewati 100GB saja, Anda harus membayar 0,09 USD per GB, yang mana hampir 4 kali lipat dari biaya penyimpanan. Untuk menghemat biaya ini, banyak orang mencoba menjalankan MinIO secara lokal, namun sering kali kesulitan karena konfigurasi yang tidak sinkron dengan kode produksi. Berikut adalah ringkasan metode konfigurasi yang saya gunakan di lapangan.
Menulis alamat S3 secara langsung di dalam kode aplikasi adalah kebiasaan yang berbahaya. Jika Anda secara tidak sengaja membiarkan alamat lokal saat melakukan deployment, hal itu akan menyebabkan kegagalan sistem. Library Boto3 membaca environment variable sistem terlebih dahulu sebelum konfigurasi internal kode. Dengan memanfaatkan prioritas ini, Anda dapat membuat aplikasi mengarah ke MinIO saat di lingkungan lokal, dan secara otomatis menggunakan AWS S3 di lingkungan produksi.
Metode Konfigurasi
AWS_S3_ENDPOINT_URL=http://localhost:9000 pada file .env di lingkungan lokal.os.getenv("AWS_S3_ENDPOINT_URL").boto3.client("s3", endpoint_url=endpoint).Dengan pengaturan ini, karena server produksi tidak memiliki environment variable tersebut, Boto3 akan mencari alamat AWS default. Ini adalah cara paling pasti untuk membuat biaya dari puluhan ribu permintaan PUT/GET selama tahap pengujian lokal menjadi 0 won.
Jika Anda mencoba menggunakan kode Terraform yang mendefinisikan infrastruktur komersial apa adanya pada MinIO lokal, Anda akan menemui error. Ini karena AWS Provider Terraform secara default mencoba memvalidasi ID akun AWS yang sebenarnya. Di lingkungan lokal, kita harus mengintersepsi dan memalsukan proses validasi ini.
Contoh Konfigurasi Terraform
s3 = "http://localhost:9000" dalam konfigurasi endpoints di dalam blok provider.s3_use_path_style, skip_credentials_validation, dan skip_requesting_account_id menjadi true.mock_key pada access_key dan secret_key.Setelah melalui pengaturan ini, Terraform akan membuat policy bucket dan aturan siklus hidup (Lifecycle Rules) pada MinIO lokal tanpa koneksi ke akun AWS yang sebenarnya. Ini efektif untuk mendeteksi kesalahan dalam definisi infrastruktur sebelum deployment, sehingga dapat menurunkan tingkat kegagalan deployment.
Untuk melihat performa query dengan benar, skala data palsu pun harus besar. Namun, membuat data dengan perulangan (loop) biasa akan sangat lambat dan melelahkan. Saya menggunakan Polars atau Apache Arrow. Karena Polars menggunakan operasi vektor, kecepatannya bisa mencapai 10 kali lipat lebih cepat daripada Pandas.
Proses Pembuatan Data
Faker dan buat chunk unit 100.000 baris dengan Polars.write_to_dataset dari engine pyarrow untuk menyimpan file Parquet yang dipartisi dengan gaya Hive (year=2026/month=04).Mengunggah dan mengunduh data 100GB berulang kali di cloud dapat menghasilkan tagihan ratusan dolar. Melakukan pengujian dengan mendorong perangkat keras lokal hingga batasnya jauh lebih sehat bagi dompet Anda.
Saat menguji logika serverless yang berjalan otomatis ketika file diunggah di lingkungan lokal, Anda dapat menggunakan fitur notifikasi bucket milik MinIO. MinIO mendukung fitur Webhook yang mengirimkan data JSON ke endpoint HTTP yang ditentukan saat sebuah objek dibuat.
Urutan Implementasi
MINIO_NOTIFY_WEBHOOK_ENDPOINT ke alamat server lokal dalam konfigurasi MinIO.s3:ObjectCreated:Put masuk dengan baik ke server lokal.Reliabilitas saat terjadi lonjakan event ditentukan oleh ukuran antrean dan tingkat kemunculan event (
). Untuk lingkungan pengujian lokal, sangat disarankan untuk memperbesar pengaturan queue_limit demi ketenangan pikiran Anda.
Terkadang file yang dibuat di dalam kontainer Docker tidak dapat dibuka di mesin host karena masalah izin (permission). Terutama bagi pengguna macOS, pastikan Anda telah mengaktifkan 'VirtioFS' di pengaturan Docker Desktop. VirtioFS memiliki kecepatan pemrosesan sistem file hingga 98% lebih cepat dibandingkan metode gRPC FUSE tradisional. Perbedaan ini sangat terasa saat menangani data dalam jumlah besar.
Cara Menyelesaikan Masalah Izin
--user $(id -u):$(id -g) saat menjalankan docker run untuk menyamakan izin antara host dan kontainer./data di dalam kontainer.Dengan membangun lingkungan lokal yang baik, Anda seolah-olah memiliki laboratorium sempurna untuk membedah prinsip kerja infrastruktur tanpa khawatir soal biaya. Lebih dari sekadar menghemat uang, Anda dapat memiliki ritme pengembangan mandiri yang tidak didikte oleh lingkungan cloud.