Amazon S3 Glacier Servisi
Uzun bir dönem boyunca saklamanız gereken ve nadiren erişeceğiniz bir arşivleme hizmetine ihtiyacınız vasa AWS’de bunun karşılığı S3 Glacier servisidir. Örneğin bir bankada çalışıyorsunuz ve müşteri hareketlerini 10 yıl saklamak zorundasınız işte burada S3 Glacier sizin için düşük maliyetli ve dayanıklı ( %99.99999999999) bir depolama alanı sunar. Burada kritik olan konu arşivlemeniz gereken veya sık erişmeniz gerekmeyen objeleriniz için bu servisi kullanmalısınız.
- Objeler arşiv olarak tutulur.
- Çok düşük maliyetlidir.
- Uzun süreli veri arşivleme ihtiyaçlarını karşılar
- Veriye AmazonS3’te olduğu gibi milisaniyeler içinde erişilmez, erişim minimum bir kaç saat sürer
- S3 Glacier arşivleri Vault’larda (mahzen) tutar. AmazonS3’de ki Bucket’ın karşılığıdır.
- S3 Glacier servisinde AWS Console üzerinden sadece Vault oluşturabiliriz. Dosyalarımızı oluşturduğumuz Vault’a göndermek için CLI ( Command Line Interface) kullanmamız gerekiyor. Bu nedenle AWS-CLI’ı bilgisayarımıza yüklemeliyiz.
- https://aws.amazon.com/cli adresinden kullandığınız işletim sistemine uygun CLI yükleyebilirsiniz. Ubuntu Linux kullandığım için ben Linux versiyonunu yükledim
- Aws-cli yüklendikten sonra IAM’de oluşturduğumuz ve AdministratorAccess sahip kullanıcımızın indirdiğimiz CVS dosyasındaki Access Key ID ve Secret Access Key bilgilerini kullanarak aws-cli konfigüre ediyoruz. Aws-cli hangi vesiyonunun yüklü olduğunu görmek için öncelikle versiyon kontrolü yapıyoruz. Daha sonra aws configure komutunu çalıştırarak cvs dosyamızdaki bilgilerle erişim sağlıyoruz.
- S3 Glacier uygulamasını aws-cli üzerinde gerçekleştireceğiz.
S3 GLACIER UYGULAMA
AWS Console’da S3 Glacier hizmetine Services-Storage-S3 Glacier üzeriden erişip Create Vault diyerek bir vault oluşturalım.
- Region kısmında o an işlem yapığımız region seçili gelir. İrlanda Region’ında işlem yapıtğımız için İrlanda seçili geldi. AWS Console’da sağ üst köşeden Region değiştirip tekrar create vault diyebiliriz. Vault Name’i IT-Karatekin olarak belirledik. Uygulamanın devamında bu Vault’a bir dosya arşivleyeceğiz. Next ile devam ediyoruz.
- Amazon SNS (simple notification service) üzerinden olay bildirimlerini almak istiyorsak burada bizim için uygun olan seçeneği seçerek ilerliyoruz. Biz SNS servisini devreye almadığımız için Do not enable notification diyerek devam ediyoruz. Kurulu bir SNS hizmetiniz varsa yeni bir notification oluşturabilir yada mevcuttaki bir notifiation kullan diyerek seçebilirsiniz.
- Review ettikten sonra Submit ederek Vault’u oluşturuyoruz. Uygulamaya AWS’nin S3 Glacieri için hazırladığı örnek senaryo gerçekleştirerek devam edeceğiz
- https://docs.aws.amazon.com/cli/latest/userguide/cli-services-glacier.html linkinde çalışmayı Ubuntu Linux’ta uygulayağım için Linux için olan aws-cli komutlarını adım adım işleteceğim.
- IT-Karatekin adında bir Vault’u aws-cli üzerinden oluşturalım aws glacier create-vault –account-id – –vault-name IT-Karatekin komutunu çalıştırıyoruz ve Vault başarılı bir şekilde oluştu.
- 3MB büyüklüğünde Largefile isimli bir dosya oluşturuyoruz, bunun için çalıştıracağımız komut dd if=/dev/urandom of=largefile bs=3145728 count=1 (dd komutunun detaylı bir şekilde https://en.wikipedia.org/wiki/Dd_(Unix) öğrenebilirsiniz) ls-al komutu ile dosyaları listelediğimizde largefile adında 3.1MB buyutunda bir dosyanın oluştuğunu görüyoruz.
- Oluşturduğumuz largefile dosyasını split komutuyla bölüyoruz. split –bytes=1048576 –verbose largefile chunk bu komutla largefile dosyamızı her biri 1048576 byte olan chunk (parça) adında dosyalara böleceğiz. Gördüğünüz gibi chunkaa chunkab ve chunkac olarak dosyamızı 3 parçaya bölmüş olduk.
- Oluşturduğumuz parçaları upload etmek için öncelikle multi-part-upload başlatmamız gerekiyor. Bunun için aws glacier initiate-multipart-upload –account-id – –archive-description “multipart upload test” –part-size 1048576 –vault-name IT-Karatekin komutunu çalıştırıyoruz. Çıkan sonuçta bir uploadId oluşacak ve bu uploadId çok uzun oluduğu için bunu bir değişkene atamamızı istiyor, bizde UPLOADID değişkenini tanımlayacağız. Gördüğünüz gibi uploadId çok uzun oluduğu için bunu bir değişkene atmak ilerde kullanmamız gerektiğinde bize kolaylık sağlayacak.
- Multipart-upload hazır olduğuna göre oluşturduğumuz chunkaa chunkab ve chunkac parçalarını S3 Glacier yükleyebiliriz. Sırasıyla komutları çalıştıracağız. UploadId bir değişkene atamamış olsaydık ID sürekli yazmamız gerekcekti.
- aws glacier upload-multipart-part –upload-id $UPLOADID –body
chunkaa
–range ‘bytes 0-1048575/*’ –account-id – –vault-name IT-Karatekin aws glacier upload-multipart-part --upload-id $UPLOADID --body
chunkab
--range 'bytes 1048576-2097151/*' --account-id - --vault-name
IT-Karatekin
aws glacier upload-multipart-part --upload-id $UPLOADID --body
chunkac
--range 'bytes 2097152-3145727/*' --account-id - --vault-name
IT-Karatekin
Chunk dosyalarımız başarılı bir şekilde upload edildi.
Son olarak upload ettiğimiz dosyanın S3 Glacier’e sorunsuz bir şekilde gittiğini kontrol etmek için attığımız chunkaa chunkab ve chunkac’nin SHA256 ile hash-ini oluşturup bunu bir değişkene atayarak kontrolünü sağlıyoruz.
Buradagöreceğiniz gibi kontrolde dosyanın aynı dosya olmadığı görüldü ve 2.partın eksik olduğu anlaşıldı. Bir üstteki ekran görüntüsünü kontol ettiğimizde chunkaa iki kez upload ettiğimizi görürsünüz. Chunkab upload ettiğimizde SHA256 hash tutarlığının sağlandığını görebilirsiniz.
root@karatekin-ubunt:~#
openssl dgst -sha256 -binary chunkaa > hash1
root@karatekin-ubunt:~#
openssl dgst -sha256 -binary chunkab > hash2
root@karatekin-ubunt:~#
openssl dgst -sha256 -binary chunkac > hash3
root@karatekin-ubunt:~#
cat hash1 hash2 > hash12
root@karatekin-ubunt:~#
openssl dgst -sha256 -binary hash12 > hash12hash
root@karatekin-ubunt:~#
cat hash12hash hash3 > hash123
root@karatekin-ubunt:~#
openssl dgst -sha256 hash123
SHA256(hash123)= 1e52564db384fd964b9553fbcc66cf3ecf341677b8ef818203ca568a7bd439d4
root@karatekin-ubunt:~#
TREEHASH=1e52564db384fd964b9553fbcc66cf3ecf341677b8ef818203ca568a7bd439d4
root@karatekin-ubunt:~#
aws glacier complete-multipart-upload --checksum $TREEHASH --archive-size 3145728 --upload-id $UPLOADID --account-id - --vault-name IT-Karatekin
An error occurred (InvalidParameterValueException) when calling the CompleteMultipartUpload operation: Miss a part at offset [1048576]
root@karatekin-ubunt:~#
aws glacier upload-multipart-part --upload-id $UPLOADID – body chunkab --range 'bytes 1048576-2097151/*' --account-id - --vault-name IT-Karatekin
{
"checksum": "2eb4362504627d19ab2addd623be6d252035eaf91753947295bdd1d404a94cde"
}
root@karatekin-ubunt:~#
aws glacier complete-multipart-upload --checksum $TREEHASH – archive-size 3145728 --upload-id $UPLOADID --account-id - --vault-name IT-Karatekin
{
"location":
"/122356726244/vaults/IT-Karatekin/archives/_A7DEEb2C79o6AchCZ5RdgYyy5VsuVbHthWaCnBNTfjHfJrRlYcL5j
iMpjLdsr9u3LXjLCq4zRn5totjFFvQoxniEypveiwXZPUSRGFDSOZZBoAhuZxkjGOl4RlyyoGnKMjnwtvzEA",
"checksum": "1e52564db384fd964b9553fbcc66cf3ecf341677b8ef818203ca568a7bd439d4",
"archiveId":"_
A7DEEb2C79o6AchCZ5RdgYyy5VsuVbHthWaCnBNTfjHfJrRlYcL5jiMpjLdsr9u3LXjLCq4zRn5totjFFvQoxniEypveiwXZPUSR GF DSOZZBoAhuZxkjGOl4RlyyoGnKMjnwtvzEA"
}
root@karatekin-ubunt:~#
Amazon S3 Glacier uygulamamızı tamamlamış olduk
.
Eline sağlık.
Teşekkürler Üstad