Sql Server 2022 ile AWS S3 Backup Alma – Yeni Özellik

SQL Server Veritabanı yöneticileri geçmişte disk ve teyp’e yedek alıyorlardı. Microsoft, Yedekleme yapılarını geliştirmek için SQL Server 2012 SP1 CU2 ile birlikte Azure Blob Storage üzerine URL Backup özelliğini duyurmuştu. SQL Server 2016 ile bu özelliği geliştirerek Block / Page blob üzerine yedek alınmasını sağlamıştı. Bu geliştirmelerin yetmemesi / isteği karşılamamasıyla SQL Server 2022 ile birlikte bu URL Backup olayını daha da geliştirerek Amazon AWS S3 üzerine yedek alınabileceğini duyurdu. Bu yazı ile SQL Server 2022’ye ait bu özelliği nasıl kullanabileceğimizi anlatıyor olacağım.

SQL Server 2022, özellikle Bulut Entegrasyonları ağırlıklı olmak üzere SQL Server’ın en güncel versiyonudur. AWS S3 Yedeklemesi bu versiyon ile gelmektedir. Şuan için SQL Server 2022 Public preview de – genel önizleme – olduğunu da unutmamak gerekir.

Birçok kurum / kuruluş / işletme büyüyen data boyutları, maliyetler gibi bir çok konuda Bulut alt yapı tercihlerini kullanıyor. Hatta artık Multi – Cloud yapısı ile çoklu bulut alt yapısını kullanır duruma geldiler. Bunun sebebinde, her bir bulut sağlayıcısının fayda ve maaliyetleri yer alıyor. Bu doğrultuda baktığınızda SQL Server 2016 yada SQL Server 2019 kullanarak sadece Azure Blob’a yedekleme işlemi yapabiliyordunuz yani bu versiyonlar AWS S3 yedeklemesini desteklemiyor.

Gereksinimler;

  • Yedekleme ve geri yükleme işlemlerini yapacağımız bir AWS S3 hesabına ihtiyacımız var.
  • AWS S3 Bucket üzerinde IAM ( Identity and Access Management – AWS hizmetlerine ve kaynaklarına kimlerin hangi koşullarda erişebileceğini belirleyebilirsiniz ) tanımlaması yapmaız gerekiyor.
  • SQL Server 2022 üzerinde Credential oluşturmamız gerekiyor.

İlk gereksinim olan AWS S3 Bucket’ın oluşturulması; AWS konsolunda oturun açın ve Amazon S3 hizmetini gidip yeni bir “bucket” oluşturalım.

Resim1

“Create Bucket” dedikten sonra karşınıza gelecek ekran aşağıdaki gibidir. Burada Bucket Name, kullancağımız Bucket (Kova) adı, Region ise bu bucket’ın hangi bölgede konumlanacağıdır. Örneğimizde ben bucket’ı US East – Virginia bölgesinde co-sqlserver2022 isiminde oluşturacağım.

Resim2

AWS S3 tarafında basit bir bucket oluşturmak ve yetki sorunu yaşamamak adına tüm genel erişimleri açmak adına aşağıdaki ekranda gösterildiği üzere “Block All public access” işaretini kaldırıp onay bilgisini veriyorum. Bu işlem ile bucket’a gelecek her türlü erişimi kabul ettiğimi beyan ediyorum. Bunu canlı ortamlarda yapmayınız! ACL kullanarak S3 erişimlerinizi yapılandırabilirsiniz.

Resim3

Sayfa içerisinde yer alan diğer ayarlamaları değiştirmeden varsayılan olarak bırakı “Create Bucket” diyerek bucket’ı oluşturuyorum.

Resim4

Bucket oluşturma işlemi tamamlandıktan sonra bucket liste içerisinde görebilirsiniz. Genellikle bulut sağlayıcıları bu tarz hizmetleri oluştururken size en yakın lokasyon önerisi yaparak oluşturmanıza imkan sağlar. co-sqlserver2022 isimli bucket’ım US-East bölgesinde oluşturdum.

Resim5

Bucket oluştu, şimdi sırada bucket içerisinde bir klasör oluşturmak. Bu klasörler sizin organizasyonunuz içerisinde kullanacağınız yapıya ait isimlendirmeyi içerebilir. Ben Önek olarak sqlbackup isimini veriyor olacağım. Çünkü içerisinde farklı klasörler ile FULL , DIFF, LOG klasörleri oluşturup yedeklemede kullanacağım.

Resim6

Demo ortamımız için ihtiyaç duyacağımız bucket tanımlamalarını gerçekleştirdik. Yine demo da işimize yarayacak olan S3 URI ve Copy Url bilgilerini de aşağıdaki resimde ki gibi elde edelim.

Resim7

S3 URL : s3://co-sqlserver2022/sqlbackup/FULL/

URL : https://co-sqlserver2022.s3.amazonaws.com/sqlbackup/FULL/

Bilgilerini elde ettiğimize göre buraya kadar işlemlerimizde bir sorunumuz yok.

Şimdi sırada AWS IAM yapılandırmasına geldi. Bucket tarafını ayarladık, IAM yapılandırması yapacağız. SQL Server 2022, veritabanı yedeklemesinin doğrudan S3 üzerine yapabilmeniz için ListBucket ve PutObject izinlerine ihtiyaç duyar.

IAM ilkesini ayarlamak için;

AWS Portal’dan IAM Polices’e gidiyoruz.

Resim8

Create Policy’den SQLServer 2022 için yeni bir policy (ilke) oluşturuyoruz. Burada Create policy dedikten sonra service kısımından S3 seçiyorum.  Access Level kısımında ise List içerisinde ListBucket, Write içerisinde PutObject ve PutBucketRequestPayment,GetBucketRequestPayment seçiyorum.

Resim9

Resources kısımından ise “All Resources” seçip devam ediyorum. Burada Request Conditions kısımından ise erişimleri sınırlandırabilirsiniz.

IAM Tarafındaki son yapılandırma aşağıdaki gibidir.

Resim10

Bir sonraki TAG ekranında Policy için Tag bilgisi girebilirsiniz. Zorunlu değildir fakat policy yönetirken olsun, fiyatlandırma süreçlerinde olsun TAG kullanımları işlemlerinizi ayırt etmek için fayda sağlayacaktır. Bu sebepten doldurmanızı öneririm. Policy oluşturduk, şimdi sırada oluşturduğumuz policy ile erişim sağlayacak kullanıcının oluşturulmasına geldi. Yine Policy ekranı içerisinde yer alan Users bölümünden kullanıcıyı ekliyoruz.

Resim11

co-sqlbackupuser isimli bir kullanıcı oluşturuyorum.

Resim12

Yetkilendirmesi işlemine geldiğimizde ise az önce oluşturduğumuz policy’i attach ediyor olacağız.

Resim13

Kullanıcı oluşturulması ve policy atanması tamamlandıktan sonra erişimlerde kullanacağımız bir Access Key ve Secret Access Key bilgisi oluşturulur.

Resim14

AWS S3 tarafındaki Bucket ile ilgili işlemlerimizi tamamladık geri kalan noktada artık SQL Server üzerinde buradan elde ettiğimiz bilgileri kullanarak Credential oluşturuyor olacağız.

Credential için ihtiyaç duyacağımız kod bloğu aşağıdaki gibidir.

CREATE CREDENTIAL [s3://<endpoint>:<port>/<bucket>]

WITH   

       IDENTITY = ‘S3 Access Key’

      ,SECRET   = ‘<AccessKeyID>:<SecretKeyID>’;

Biz AWS tarafında elde ettiğimiz bilgiler ile yukarıdaki kod bloğunu tanımlayalım. Tanımlama içerisinde S3 bilgilerimiz de aşağıdaki gibidir.

Bucket Name:    co-sqlserver2022

Secret Key:         AKIAXQYUDTPT6QHRJCI6

Access Key:        gR5agEB0gP/OV69PUC0hkiwBiGBjJgfZat2/5nOD

S3 URL:                s3://co-sqlserver2022/sqlbackup/Full/

URL:                     https://co-sqlserver2022.s3.amazonaws.com/sqlbackup/Full/

URL2:                   https://co-sqlserver2022.s3.us-east-1.amazonaws.com/sqlbackup/Full/

Credential tanımlamak için güncel bilgiler ile aşağıdaki sql kodunu çalıştırıyoruz.

CREATE CREDENTIAL [s3://co-sqlserver2022.s3.us-east-1.amazonaws.com/sqlbackup/FULL]

WITH   

       IDENTITY = ‘S3 Access Key’

      ,SECRET   = ‘AKIAXQYUDTPT6QHRJCI6:gR5agEB0gP/OV69PUC0hkiwBiGBjJgfZat2/5nOD’;

Resim15

DMC isimli veritabanın Backup almak için aşağıdaki sql kod bloğunu kullanacağız.

BACKUP DATABASE DMC

TO      URL = ‘s3://co-sqlserver2022.s3.us-east-1.amazonaws.com/sqlbackup/FULL/DMC.bak’

WITH    FORMAT

       ,STATS  = 10

       ,COMPRESSION;

Resim16

Yukarıda ki resimden de anlaşılacağı üzere DMC isimli veritabanının yedeğini oluşturduğumuz AWS S3 Bucket’a aldık. Aşağıdaki ekran görüntüsü ise AWS Portal üzerinden S3 içeriğinin göstermektedir.

Resim17

Bir sonraki yazımızda aldığımız bu S3 Backup’ı nasıl restore edeceğimizi anlatacağım.

Çağlar Özenç
Microsoft Data Platform MVP

Leave a Reply

Your email address will not be published. Required fields are marked *