Memanfaatkan Amazon S3 Untuk Backup

Amazon Web Services

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.

Create Bucket

Klik next ke bagian Configure Options, biarkan saja setingan default

Configure Options

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

Set Permission

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.

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

Add User

Klik pada Kotak Attach existing policies directly, pilih nama policy yang telah dibuat sebelum nya. kemudian Klik Next: Tags

Set Permissions

Klik Next: Tags, berikan informasi tag bila dibutuhkan. Kemudian Klik Next: Review, dan Klik Create User.

Created 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.

Kadek Jayak
Seorang Web Developer di Denpasar Bali. Nulis blog hanya sekedar iseng dan berbagi pengalaman.
%d blogger menyukai ini: