Loading...
S3 uyumlu depolama

Object Storage

cdn.com.tr Object Storage, medya, statik assetler ve yedekleri uygulama çalışma zamanınızın dışında tuttuğunuz S3 uyumlu bir bucket hizmetidir. Bucket'lar oluşturur, access key ve secret key çiftleri üretir ve içeriği edge CDN'in önüne koyarsınız; böylece indirmeler hızlı olur ve origin yükü düşük kalır. Standart S3 araçları ve SDK'ları endpoint'e karşı değişiklik yapmadan çalışır.

Object Storage

Dosyaları neden uygulama diskinden çıkarmalısınız

Uygulama container'ları, kullanıcı yüklemelerini kaybetmeden yeniden deploy edilebilmesi, ölçeklenebilmesi ve geri alınabilmesi için stateless olmalıdır. Avatarlar, ürün fotoğrafları, faturalar ve video container dosya sistemine yazıldığında, her yeniden başlatma veri kaybı riski taşır ve her replica farklı bir dosya setine sahip olur. Object Storage, tüm replica'lara okuyup yazabileceği tek, paylaşılan, dayanıklı bir yer vererek bunu çözer. Uygulamanız tek kullanımlık kalırken veri bağımsız olarak yaşar.

Gerçekten S3 uyumlu, taklidi değil

Hizmet S3 API'sini konuşur, bu yüzden zaten kullandığınız araçlar çalışmaya devam eder: aws-cli, boto3, AWS SDK for JavaScript, Laravel ve Symfony'nin S3 filesystem driver'ları, rclone ve s3cmd — hepsi endpoint URL'sini ve anahtar çiftini ayarladıktan sonra onunla konuşur. Büyük dosyalar için multipart upload'lar, nesne metadata'sı ve content-type işleme, S3 geliştiricilerinin beklediği şekilde davranır. Bu, zaten S3 kullanan bir uygulamayı taşımanın genellikle bir kod yeniden yazımı değil bir yapılandırma değişikliği olduğu anlamına gelir.

Bucket'lar, access key'ler ve etki alanı

Veriyi bucket'lara organize eder ve istediğiniz zaman döndürebileceğiniz ya da iptal edebileceğiniz access key ID ve secret key çiftleriyle erişimi kontrol edersiniz. Uygulama başına ya da bucket başına bir anahtar tutmak etki alanını sınırlar: bir anahtar bir logda ya da bir istemci bundle'ında sızarsa, diğer her servise dokunmadan sadece o çifti iptal edip yeniden üretirsiniz. Panel hangi anahtarların var olduğunu listeler; böylece artık kullanılmayanları denetleyip emekliye ayırabilirsiniz.

Storage ve CDN birlikte çalışır

Object Storage ve edge CDN aynı platform olduğundan, ayrı bir origin bağlamadan bucket nesnelerini cache üzerinden sunabilirsiniz. Public bir bucket ya da imzalı bir edge route, popüler dosyaların kullanıcılara yakın cache'lendiği ve depolamaya tekrar tekrar ulaşmadığı hızlı bir indirme yolu haline gelir. Var olan bir key altındaki bir dosyayı değiştirdiğinizde, panelden ya da cdnctl'den hedefli bir purge edge'i tazeler; böylece kimseye bayat bir kopya sunulmaz.

Storage'ı container uygulamalarına bağlama

Kimlik bilgilerini Dockerfile'ınıza yapıştırmak ya da bir repoya commit etmek yerine, bir bucket'ı bir Container App'e bağlarsınız ve platform, birden çok bucket'ın ayrı kalması için isteğe bağlı olarak bir önek altında endpoint ve anahtarları ortam değişkeni olarak teslim eder. Kodunuz çalışma zamanında standart env adlarını okur, secrets asla image'da görünmez ve bir anahtarı döndürmek yeniden build gerektirmek yerine binding'i günceller. Bu, config'in koddan ayrılması yönündeki twelve-factor prensibini bozmadan korur.

Yedekler ve soğuk veri

Object Storage, ana sunucudan uzakta tutmak ama yine de hızlıca geri yükleyebilmek istediğiniz veritabanı dump'ları, uygulama yedekleri ve arşiv exportları için doğal bir yerdir. Erişim key tabanlı ve kapsamlı olduğundan, bir yedekleme işi, canlı uygulamanızın kullandığı anahtarlardan ayrı, sadece-yazma tarzı bir workflow anahtarı tutabilir. cdnctl ile gece işinde scriptlendiğinde, yüklemeler ve saklama temizlikleri gözetimsiz çalışır, ve kimse fark etmeden arşivlerin büyümemesi için bucket'ta bir kullanım limiti tutarsınız.

Adım adım nasıl kurulur

1

Bir bucket oluşturun

Panelde Object Storage'ı açın ve Create Bucket'ı seçin. Ona DNS uyumlu bir ad verin (küçük harfler, rakamlar ve tire) ve nesnelerin varsayılan olarak private mi yoksa public olarak okunabilir mi olacağına karar verin. Private, yedekler ve imzalayacağınız ya da proxy'leyeceğiniz orijinaller için doğru seçimdir; public read ise doğrudan CDN üzerinden sunmayı planladığınız assetlere uyar.

2

Bir access key çifti üretin

Access Keys sekmesini açın ve bir anahtar üretin. Bir access key ID ve bir secret key alırsınız; secret yalnızca bir kez gösterilir, bu yüzden hemen secret manager'ınıza kopyalayın. Anahtarı, her proje için tek bir master anahtarı yeniden kullanmak yerine ihtiyaç duyduğu bucket'a kapsamlandırın; böylece bir sızıntı tek bir çifti iptal ederek sınırlandırılabilir.

3

Bir S3 istemcisini endpoint'e yönlendirin

Herhangi bir S3 SDK'sını ya da aws-cli'yi, bucket sayfasında gösterilen cdn.com.tr endpoint URL'si, path-style adresleme ve anahtar çiftinizle yapılandırın. Örneğin: aws --endpoint-url <endpoint> s3 cp ./poster.jpg s3://my-media/posters/. API S3 protokolünü konuştuğu için özel bir istemci gerekmez.

4

Bucket'ı bir container uygulamasına bağlayın

Bir Container App üzerinde Bind Object Storage'ı seçin ve bucket'ı belirleyin. Platform, endpoint, region, access key ve secret'ı ortam değişkeni olarak enjekte eder (isteğe bağlı olarak ASSETS_ gibi bir önek ile); böylece kodunuz kimlik bilgilerini image'a ya da repoya sabit kodlamak yerine ortamdan okur.

5

CDN'in arkasına alın

Bir domain bağlayın ya da nesnelerin edge lokasyonlarında cache'den sunulması için bucket'ın edge route'unu kullanın. Yükleme sırasında cache header'ları ayarlayın ve aynı key altında bir dosyanın üzerine yazdığınızda görüntüleyicilerin yeni sürümü almasını sağlamak için panelden ya da cdnctl'den purge kullanın.

6

Limitler belirleyin ve cdnctl ile otomatikleştirin

Kontrolsüz büyümeye karşı korunmak için bucket'a bir kullanım limiti uygulayın ve yedekleme yüklemeleri ile temizliklerin paneli açmadan CI'dan çalışması için rutin görevleri cdnctl ile scriptleyin. Anahtarları düzenli olarak aynı Access Keys sekmesinden döndürün.

Örnek senaryolar

CDN arkasında medya kataloğu

Bir e-ticaret sitesi her ürün görselini ve orijinal yüklemeyi bir bucket'ta saklar, türevleri CDN üzerinden sunar ve uygulama container'larını stateless tutarak deploy'ların kullanıcı dosyalarına asla dokunmamasını sağlar.

Replica'lar arasında paylaşılan yüklemeler

Birkaç replica'ya ölçeklenmiş bir container uygulaması, kullanıcı yüklemelerini tek bir bucket'a yazar; böylece her instance aynı dosyaları okur ve bir yeniden başlatma ya da ölçeklenme olayı asla veri kaybetmez.

Gece yapılan veritabanı yedekleri

Bir cron ya da CI işi, kapsamlı bir anahtar ve cdnctl kullanarak her gece sıkıştırılmış veritabanı dump'larını private bir bucket'a gönderir; bir kullanım limiti ve saklama temizliği maliyeti öngörülebilir tutar.

Mevcut bir S3 uygulamasını taşıma

Zaten AWS S3 kullanan bir ekip, SDK endpoint'ini ve anahtarlarını cdn.com.tr'ye yönlendirir, nesneleri kopyalamak için rclone kullanır ve storage kodunu yeniden yazmadan yayınlar.

Sıkça sorulan sorular

Buna karşı hangi S3 araçları ve SDK'ları gerçekten çalışıyor?

Yaygın olanlar: aws-cli, boto3, AWS SDK for JavaScript, rclone, s3cmd ve Laravel ile Symfony'deki S3 filesystem driver'ları. Bucket sayfasından endpoint URL'sini ayarlayın, path-style adresleme kullanın ve access key ile secret'ınızı sağlayın. Büyük nesneler için multipart upload'lar desteklenir.

Bucket dosyalarını CDN üzerinden doğrudan halka sunabilir miyim?

Evet. Bucket'ı ya da nesneyi public olarak okunabilir yapın, ya da bucket'ın edge route'unu kullanın ve bir domain bağlayın. Nesneler daha sonra edge lokasyonlarında cache'lenir; böylece tekrarlanan indirmeler her seferinde depolamaya gitmek yerine cache'den sunulur.

Aynı key altındaki bir dosyanın üzerine yazdığımda ne olur?

Storage yeni nesneyi hemen alır, ama edge cache'i süresi dolana kadar önceki sürümü tutmaya devam edebilir. Yüklemeden hemen sonra o yol için panelden ya da cdnctl ile bir purge çalıştırın; böylece görüntüleyiciler taze dosyayı alır.

Bir access key sızarsa ne yapmalıyım?

O anahtar çiftini Access Keys sekmesinden iptal edin ve yenisini üretin. Anahtarları bucket başına ya da uygulama başına kapsamlandırmanız gerektiğinden, bir çifti iptal etmek diğer servislerinizi aksatmaz. Binding'i ya da secret store'unuzu yeni secret ile güncelleyin.

Kimlik bilgilerini container image'ıma sabit kodlamam gerekiyor mu?

Hayır, ve yapmamalısınız. Bucket'ı Container App'e bağlayın; endpoint, region, access key ve secret isteğe bağlı olarak bir önek altında ortam değişkeni olarak gelir. Kodunuz bunları çalışma zamanında okur, böylece secrets image'ın ve reponun dışında kalır.

Storage'ın sınırsız büyümesini nasıl engellerim?

Fark edilmeden şişmesini önlemek için bucket'a bir kullanım limiti koyun ve yedekleme bucket'ları için eski dump'ların bir programa göre budanması için cdnctl ile bir saklama temizliği scriptleyin. Panel, bucket başına mevcut kullanımı gösterir; böylece takip edebilirsiniz.