Amazon S3 merupakan layanan object storage yang disediakan oleh Amazon. Harga yang dihitung per GB tanpa minimum membuatnya terasa murah bila digunakan untuk backup proyek – proyek kecil. Harga nya mulai dari $0.023/GB atau sekitar Rp. 350/GB. Mau lebih murah lagi gunakan storage class One Zone-Infrequent Access, tarif nya $0.01/GB atau sekitar Rp. 150/GB per bulan, sangat RECEH!
Artikel ini akan menjelaskan bagaimana memasang Amazon S3 mulai dari pembuatan Credential (IAM), backup DB, compress, dan menguploadnya. Untuk meng-uploadnya diperlukan tools aws-cli, sistem operasi yang saya gunakan adalah Ubuntu 18. Jika anda belum memiliki akun silahkan buat dulu di https://aws.amazon.com/ , Amazon juga menawarkan Free Tier gratis selama setahun. Selamat membaca 🙂
Persiapan pada AWS
Buat sebuah S3 Bucket
Bucket dapat diibaratkan sebuah Drive/Disk yang nantinya akan menyimpan seluruh file anda. Nama sebuah bucket harus unique, tidak boleh sama dengan customer amazon lainnya.
Masuk ke halaman S3 Management Console kemudian klik Create Bucket untuk membuat bucket baru. Masukan nama bucket pada kolom yang disediakan kemudian klik tombol Create. Tarif S3 berbeda – beda tergantung pada region yang digunakan, untuk lebih jelasnya lihat pada halaman Cloud Storage Pricing.
Klik next ke bagian Configure Options, biarkan saja setingan default
Klik Next ke Bagian Set Permissions, pada bagian ini biarkan default saja yaitu Block all Public Access, artinya file yang tersimpan tidak dapat diakses langsung oleh publik. Jika nantinya anda memerlukan file backup anda dapat mendownload nya melalui S3 Management Console
Kemudian Klik next ke bagian Review pastikan semuanya sudah benar, dan klik Create Bucket untuk membuat bucket.
Setelah bucket dibuat anda perlu mendapatkan ARN (Amazon Resource Name) yang digunakan sebagai identifikasi bucket tersebut untuk membuat permission di bagian selanjutnya.
Klik pada nama bucket, kemudian klik pada tombol Copy Bucket ARN dan paste di tempat yang aman.
Membuat Policy
Policy mendefinisikan permission/hak akses yang dapat diberikan ke user, group, atau role.
Untuk membuat policy masuk ke halaman IAM Management Console, klik menu tab Policies, kemudian klik Create Policy. Anda dapat membuat policy dengan menggunakan Visual Editor atau dengan mempaste policy seperti dibawah ini pada tab JSON:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "s3:", "Resource": "arn:aws:s3:::NAMA-BUCKET/*" } ] }
Policy tersebut akan memberikan akses ke resource yang didefinisikan, dalam hal ini Bucket yang dibuat tadi. Ganti bagian bagian resource dengan milik anda kemudian klik Review Policy.
Berikan nama pada policy yang akan dibuat kemudian klik Create Policy.
Buat User Access
Setelah membuat Policy anda memerlukan sebuah akun untuk dapat mengupload file ke dalam S3 Bucket yang telah dibuat tadi.
Masuk ke halaman IAM Management Console, klik menu tab Users, kemudian klik tombol Add User. Isikan nama user dan centang pada checkbox Programmatic access, kemudian klik Next: Permissions
Klik pada Kotak Attach existing policies directly, pilih nama policy yang telah dibuat sebelum nya. kemudian Klik Next: Tags
Klik Next: Tags, berikan informasi tag bila dibutuhkan. Kemudian Klik Next: Review, dan Klik Create User.
Simpan Access Key ID dan Secret access key anda di tempat yang aman untuk digunakan nanti.
Persiapan pada Server
Install awscli
awscli merupakan tools untuk memanage layanan Amazon Web Service, awscli dapat digunakan untuk mengupload file ke bucket S3. Tools awscli tersedia pada repository ubuntu, untuk menginstall nya gunakan perintah dibawah ini:
sudo apt-get install awscli
Jika anda menggunakan distro lain yang tidak menyediakan awscli, anda dapat menginstallnya menggunakan python package installer (pip).
Backup Scripts
Upload File
buat sebuah file misalnya /etc/backup_web.sh
nano /etc/backup_web.sh
Kemudian isikan script dibawah ini, sesuaikan variable nya dengan yang anda miliki
#!/bin/sh AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= S3_BUCKET=virgin-backup SITE_NAME=kadekjayak.web.id WEB_ROOT=/var/www/html # Set Configuration aws configure set aws_access_key_id ${AWS_ACCESS_KEY_ID} aws configure set aws_secret_access_key ${AWS_SECRET_ACCESS_KEY} # Kompress File OUTPUT_FILE=${SITE_NAME}-$(date +"%d-%b-%Y").tar.gz cd /tmp tar -zcf \ ${OUTPUT_FILE} \ ${WEB_ROOT} \ --ignore-failed-read if [ "${?}" -eq 0 ]; then aws s3 cp ${OUTPUT_FILE} s3://${S3_BUCKET}/${SITE_NAME}/ --storage-class STANDARD rm ${OUTPUT_FILE} echo ${SITE_NAME} WEB Backup Complete else echo ${SITE_NAME} Error backing up Web Data rm ${OUTPUT_FILE} exit 255 fi
jalan kan script diatas dengan perintah dibawah ini:
sh backup.sh
kemudian cek melalui S3 Management console untuk memastikan file berhasil di upload.
Ada beberapa storage class yang dapat anda pilih antara lain:
- STANDARD
- REDUCED_REDUNDANCY
- STANDARD_IA
Masing masing storage class memiliki harga dan perhitungan yang berbeda, untuk lebih lengkap nya silahkan lihat pada halaman Cloud Storage Pricing.
Jika anda menginstall awscli dari pip anda dapat menggunakan storage class yang lain seperti ONEZONE_IA dan DEEP_ARCHIVE yang harganya jauh lebih murah namun biaya nya dihitung langsung 30 hari, pricing di aws memang agak rumit.
Backup Database
Meng-export database mysql dapat dilakukan dengan tools mysqldump, silahkan contoh script dibawah ini:
#!/bin/bash AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= S3_BUCKET=virgin-backup SITE_NAME=kadekjayak.web.id # Database Config MYSQL_USER=dbuser MYSQL_HOST=127.0.0.1 MYSQL_PORT=3306 MYSQL_PASS=dbpass MYSQL_DB=dbname # Set Configuration aws configure set aws_access_key_id ${AWS_ACCESS_KEY_ID} aws configure set aws_secret_access_key ${AWS_SECRET_ACCESS_KEY} #Backup Database DB_FILE=db-$(date +"%d-%b-%Y").sql cd /tmp mysqldump \ --host ${MYSQL_HOST} \ --port ${MYSQL_PORT} \ -u ${MYSQL_USER} \ --password="${MYSQL_PASS}" \ ${MYSQL_DB} > ${DB_FILE} if [ "${?}" -eq 0 ]; then gzip -f ${DB_FILE} aws s3 cp ${DB_FILE}.gz s3://${S3_BUCKET}/${SITE_NAME}/ --storage-class STANDARD rm ${DB_FILE}.gz else echo ${SITE_NAME} Error backing up Database exit 255 fi
Kedua script diatas dapat anda temukan selengkapnya pada Gist saya
Otomatisasi : Cronjob
Anda dapat menggunakan cronjob jika ingin agar script backup tersebut berjalan otomatis pada waktu tertentu. Untuk memasang cronjob buka file /etc/crontab.
nano /etc/crontab
kemudian tambahkan baris seperti dibawah ini:
23 59 28 * * root /bin/sh /etc/backup.sh > /var/log/s3backup.log 2>&1
Cron tersebut akan berjalan setiap akhir bulan (tanggal 28), silahkan sesuaikan sendiri sesuai kebutuhan anda.
Sekian artikel ini saya buat untuk melawan kemalasan saya, jika ada pertanyaan atau kesalahan silahkan komentar dibawah.
Oh iya, AWS S3 mempunyai fitur Expiration yang dapat digunakan untuk menghapus otomatis file yang telah lama di upload. Fitur tersebut sangat berguna agar kapasitas storage yang digunakan tetap kecil jadi hemat biaya.
Leave a Reply