Overview:
Pada tulisan kali ini kita akan membuat EBS volume pada AWS, dengan beberapa skenario. EBS merupakan block storage yang ada pada service AWS, ia digunakan pada EC2 instance seperti hardisk yang bisa dicabut colok. EBS ini merupakan storage yang fleksibel yang mana kita bisa menambahkan kapasitas volume, mengubah kapasitas IOPS dan sebagainya. Adapun penjelasan lebih detail mengenai EBS Volume pada AWS bisa dibaca disini. Untuk langkah-langkah yang akan kita lakukan adalah sebagi berikut:
Membuat instance
Membuat EBS volume
Attach volume ke instance-0 (AZ-A)
Masuk kedalam instance
Attach volume ke instance-1 (AZ-A)
Masuk ke instance 2
Snapshot volume
Buat volume baru dari snapshot
Attach volume snapshot ke instance-2 (AZ-B)
Clean up (bersihkan sumber daya)
Prasyarat:
Akun AWS
Terraform
Region: us-east-1
VPC default atau VPC yang sudah dibuat sebelumnya disini
Availability Zone: us-east-1a (instance-1-2)
Availability Zone: us-east-1b (instance3)
Kode terraform, disini
Langkah-langkah:
Membuat Instance
Pada bagian ini kita akan membuat instance sebanyak 3 instance dengan detail:
ebs-test-instance-0 (availability zone A)
ebs-test-instance-1 (availability zone A
ebs-test-instance-2 (availability zone B)
Pada langkah ini kita menggunakan tool terraform untuk membuat instance. Adapun langkah-langkahnya bisa dilihat di repo Github. Jika ingin membuat manual juga bisa dilakukan, namun kali ini kita akan membuat instance dengan script terraform.
Mambuat EBS
Buat instance
Pilih menu volumes yang ada pada EBS
Klik create volume
Isi detail volume
Isi size 5 GiB
Pilih Availability Zone: us-east-1a
Klik Create volume
Attach volume ke instance-0
Klik kanan EBSTest
Klik Attach volume
Pilih instance-0
Masuk ke dalam Instance
Masuk kedalam instance-0, jalankan command berikut:
[ec2-user@ip-10-16-55-192 ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdf 202:80 0 5G 0 disk [ec2-user@ip-10-16-55-192 ~]$ sudo file -s /dev/xvdf /dev/xvdf: data
[ec2-user@ip-10-16-55-192 ~]$ sudo mkfs -t xfs /dev/xvdf meta-data=/dev/xvdf isize=512 agcount=4, agsize=327680 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=0 data = bsize=4096 blocks=1310720, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [ec2-user@ip-10-16-55-192 ~]$ sudo file -s /dev/xvdf /dev/xvdf: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
[ec2-user@ip-10-16-55-192 ~]$ sudo mkdir /ebstest [ec2-user@ip-10-16-55-192 ~]$ sudo mount /dev/xvdf /ebstest [ec2-user@ip-10-16-55-192 ~]$ df -k Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 485312 0 485312 0% /dev tmpfs 494456 0 494456 0% /dev/shm tmpfs 494456 468 493988 1% /run tmpfs 494456 0 494456 0% /sys/fs/cgroup /dev/xvda1 8376300 1635808 6740492 20% / tmpfs 98892 0 98892 0% /run/user/0 tmpfs 98892 0 98892 0% /run/user/1000 /dev/xvdf 5232640 38244 5194396 1% /ebstest [ec2-user@ip-10-16-55-192 ~]$ cd /ebstest
[ec2-user@ip-10-16-55-192 ebstest]$ sudo bash -c "echo Test file > testfile.txt" [ec2-user@ip-10-16-55-192 ebstest]$ ls testfile.txt [ec2-user@ip-10-16-55-192 ebstest]$ cat testfile.txt Test file
Reboot Instance
[ec2-user@ip-10-16-55-192 ebstest]$ sudo reboot
Masuk ke instance-0 kembali
[ec2-user@ip-10-16-55-192 ~]$ df -k Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 485312 0 485312 0% /dev tmpfs 494456 0 494456 0% /dev/shm tmpfs 494456 440 494016 1% /run tmpfs 494456 0 494456 0% /sys/fs/cgroup /dev/xvda1 8376300 1639020 6737280 20% / tmpfs 98892 0 98892 0% /run/user/1000
Terlihat pada hasil diatas, mountingan /ebstest terlepas, karena tidak di set auto mount, sehingga ketika di restart maka disk tidak persistent.
Set auto mount pada filesystem, catat UUID
[ec2-user@ip-10-16-55-192 ~]$ sudo blkid /dev/xvdf /dev/xvdf: UUID="35cff01e-2e03-4f68-8fec-34e79d60c013" TYPE="xfs"
Edit file /etc/fstab
[ec2-user@ip-10-16-55-192 ~]$ sudo vi /etc/fstab ... UUID=35cff01e-2e03-4f68-8fec-34e79d60c013 /ebstest xfs defaults,nofile ...
[ec2-user@ip-10-16-55-192 ~]$ sudo mount -a
Stop instance-0
Attach Volume ke instance-1
Detach volume, detach EBS volume dari instance-0
Klik kanan volume EBSTest
Klik Detach
Attach volume ke instance-1, masuk ke dalam instance -1, jalankan perintah berikut:
[ec2-user@ip-10-16-54-184 ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdf 202:80 0 5G 0 disk [ec2-user@ip-10-16-54-184 ~]$ sudo file -s /dev/xvdf /dev/xvdf: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs) [ec2-user@ip-10-16-54-184 ~]$ sudo mkdir /ebstest [ec2-user@ip-10-16-54-184 ebstest]$ sudo mount /dev/xvdf /ebstest [ec2-user@ip-10-16-54-184 ebstest]$ df -k Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 485312 0 485312 0% /dev tmpfs 494456 0 494456 0% /dev/shm tmpfs 494456 412 494044 1% /run tmpfs 494456 0 494456 0% /sys/fs/cgroup /dev/xvda1 8376300 1638788 6737512 20% / tmpfs 98892 0 98892 0% /run/user/1000 /dev/xvdf 5232640 38248 5194392 1% /ebstest [ec2-user@ip-10-16-54-184 ~]$ cd /ebstest/ [ec2-user@ip-10-16-54-184 ebstest]$ ls /ebstest/ testfile.txt [ec2-user@ip-10-16-54-184 ebstest]$ cat testfile.txt Test file
Pada hasil diatas kita bisa lihat bahwa file testfile.txt yang sebelumnya kita buat diinstance-0 masih ada, itu dikarenakan EBS volume ini bersifat persistent, selama datanya tidak dihapus datanya masih tetap ada.
Stop instance-1
Detach volume dari instance-1
Snapshot Volume
Snapshot pada volume EBSTest ini kita lakukan agar instance-2 pada availability_zone B bisa menggunakan volume yang sebelumnya sudah kita buat.
Lantas kenapa harus menggunakan snapshot ?
Jawabannya adalah, karena kita tidak bisa menempelkan volume yang ada di avaialability zone A ke instance-2 yang berada pada availability zone B. EBS volume hanya bisa di attach pada availability zone yang sama, seperti yang sudah kita contohkan pada instance-0 dan instance-1 diatas, sehingga tidak bisa di attach ke instance-2 karena berbeda availability zone.
Nah, untuk itulah kita lakukan snapshot terlebih dahulu, kemudian kita buat volume dari snapshot tersebut untuk diarahkan ke availability zone B, tempat dimana instance-2 berada.
Adapun cara kerja dari snapshot ini adalah ia akan mereplikasi datanya ke availability zone yang lain di dalam region yang sama. Snapshot memungkinkan kita untuk membuat volume di satu AZ kemudian dapat dipindahkan ke Availability Zone yang lain.
Buat snapshot
klik kanan volume EBSTest
Klik create snapshot
Isi deskripsi
Klik Create snapshot
Membuat Volume dari Snapshot
Masuk ke snapshot
Klik kanan snapshot
Klik Create volume from snapshot
Pilih Availability Zone B
Attach Volume ke instance-2
Attach volume
Masuk ke volumes
Klik kanan volume
Attach ke instance-2 di availability zone B
Masuk kedalam instance-2, jalankan perintah berikut:
[ec2-user@ip-10-16-113-66 ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdf 202:80 0 5G 0 disk [ec2-user@ip-10-16-113-66 ~]$ sudo file -s /dev/xvdf /dev/xvdf: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs) [ec2-user@ip-10-16-113-66 ~]$ sudo mkdir /ebstest [ec2-user@ip-10-16-113-66 ~]$ sudo mount /dev/xvdf /ebstest [ec2-user@ip-10-16-113-66 ~]$ cd /ebstest [ec2-user@ip-10-16-113-66 ebstest]$ ls testfile.txt [ec2-user@ip-10-16-113-66 ebstest]$ cat testfile.txt Test file
Dari hasil diatas bisa dilihat bahwa data dari volume sebelumnya masih ada, sehingga instance dari availability zone yang berbeda dapat mengakses data tersebut dengan di snapshot terlebih dahulu.
3. Stop Instance
4. Detach volume
Clean Up
Hapus snapshot
Hapus volume
Hapus Instance (jika menggunakan terraform bisa dilihat pada repo Github)
Terraform code: https://github.com/ahakimx/terraform-aws
Referensi: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes.html