Kurs
AWS depolamaya dosyaları elle kopyalamak zahmetli, hataya açık ve verimsiz olabilir - özellikle büyük veri hacimleriyle uğraşırken. Bunu istemezsiniz.
AWS Komut Satırı Arayüzü (CLI), bu süreci basitleştiren aws s3 cp adlı kullanışlı bir araç sunar. Bu komut, tüm işletim sistemlerinde çalışan basit ve betiklenebilir komutlarla Amazon S3 kovalarına dosya kopyalamanıza ve kovalardan dosya çekmenize olanak tanır. AWS CLI kullanmak yalnızca zaman kazandırmaz, aynı zamanda rutin dosya aktarım görevlerini otomatikleştirmenizi de sağlar.
aws s3 cp komutu, karmaşık dosya aktarım senaryolarını yönetmek için birçok seçenek sunar. Tekil dosyaları kopyalayabilir, tüm dizinleri yinelemeli (recursive) olarak aktarabilir, kalıplara göre dosyaları filtreleyebilir ve maliyet optimizasyonu için farklı depolama sınıfları belirtebilirsiniz.
Bu eğitimde, aws s3 cp komutunu etkili şekilde kullanmak için bilmeniz gereken her şeyi; temel komutlardan gelişmiş tekniklere ve otomasyon stratejilerine kadar adım adım göstereceğim.
> AWS'ye yeni misiniz ve bulut depolama ile S3 hakkında emin değil misiniz? Ayrıntılı S3 ve EFS rehberimiz başlangıç için mükemmel bir nokta. Özellikle S3 ile ilgileniyorsanız, derinlemesine S3 rehberimize göz atın.
AWS S3 cp nedir?
aws s3 cp komutu, AWS Komut Satırı Arayüzü içinde yer alan ve yerel sisteminiz ile Amazon S3 depolaması arasında dosya kopyalamanıza olanak tanıyan bir yardımcı programdır.
Özünde, standart Linux cp komutuna benzer tanıdık bir komut satırı deneyimi sunmak üzere tasarlanmıştır; ancak S3 kovalarıyla etkileşim kurmaya uyarlanmıştır.
Temel olarak aws s3 cp, yerel makineniz ile AWS'nin bulut depolama altyapısı arasında köprü görevi görür. Bir aws s3 cp komutu çalıştırdığınızda, AWS CLI büyük aktarımlar için kimlik doğrulamayı ve dosya parçalamayı yönetir ve kopyalama işlemi sırasında veri bütünlüğünü sağlar. Bu yardımcı program, tekil dosyaları, joker karakterlerle birden çok dosyayı ve yinelemeli işlemlerle tüm dizin yapılarını kopyalamayı destekler.
aws s3 cp birçok şeye muktedirdir, sadece birkaçını listeleyeceğim:
- Çift yönlü aktarımlar (S3'e yükleme veya S3'ten indirme).
- Tüm dizin yapılarını yinelemeli olarak kopyalama.
- Çeşitli S3 depolama sınıfları desteği (Standard, Intelligent-Tiering, Glacier, vb.).
- Dahil et/dışla kalıplarıyla dosya filtreleme.
- Aktarımlar sırasında dosya meta verilerinin korunması.
- Güvenlik için AWS Kimlik ve Erişim Yönetimi (IAM) ile entegrasyon.
Ancak aws s3 cp gücünü esnekliğinden ve AWS ekosistemiyle entegrasyonundan alır. Depolama sınıfı, şifreleme, meta veriler, erişim denetimi ve daha fazlası gibi unsurları kontrol etmek için farklı parametreler belirtebilirsiniz. Bu da komutu, basit tek seferlik dosya aktarımlarından karmaşık, otomatikleştirilmiş yedekleme çözümlerine kadar her şeye uygun hale getirir.
Komut, AWS Yönetim Konsolu'nu kullanmaktan farklıdır; konsolda elle gezinme ve tıklama gerekir. aws s3 cp komutunu doğrudan terminalinizden çalıştırabilir veya betiklere ve otomatik iş akışlarına entegre edebilirsiniz. S3'e bu programatik erişim, özellikle DevOps mühendisleri ve veri bilimcileri için kritiktir.
Özetle, aws s3 cp performansı korurken büyük aktarımları yönetebilen güvenilir ve betiklenebilir bir çözüm sunar. Yarıda kesilen yüklemeleri ve indirmeleri devam ettirebilir; bu da dengesiz ağ bağlantılarıyla çalışırken veya aşırı büyük dosyaları aktarırken özellikle kullanışlıdır.
Sırada sıkıcı kısım var - AWS CLI'ı sisteminizde kurmak.
AWS CLI ve AWS S3 Kurulumu
aws s3 cp komutuna geçmeden önce, sisteminizde AWS CLI'ın kurulu ve doğru yapılandırılmış olması gerekir. Daha önce AWS ile hiç çalışmadıysanız endişelenmeyin - kurulum kolaydır ve 10 dakikadan az sürer.
Bunu üç basit aşamaya böleceğim: AWS CLI aracını kurmak, kimlik bilgilerinizi yapılandırmak ve depolama için ilk S3 kovasını oluşturmak.
AWS CLI'ın kurulumu
Kurulum süreci, kullandığınız işletim sistemine göre biraz değişir.
Windows sistemleri için:
- Resmi AWS CLI dokümantasyon sayfasına gidin
- 64-bit Windows yükleyicisini indirin
- İndirilen dosyayı başlatın ve yükleme sihirbazını izleyin
Linux sistemleri için:
Terminal üzerinden aşağıdaki üç komutu çalıştırın:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
macOS sistemleri için:
Homebrew kurulu olduğunu varsayarak, Terminal'den şu tek satırı çalıştırın:
brew install awscli
Homebrew yoksa, bunun yerine şu iki komutu kullanın:
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
Başarılı bir kurulum doğrulaması için terminalinizde aws --version komutunu çalıştırın. Şuna benzer bir çıktı görmelisiniz:

Görsel 1 - AWS CLI sürümü
AWS CLI'ın yapılandırılması
CLI kurulduktan sonra, kimlik doğrulama için AWS kimlik bilgilerinizi ayarlama zamanı.
Önce AWS hesabınıza erişin ve IAM servis panosuna gidin. Programatik erişime sahip yeni bir kullanıcı oluşturun ve uygun S3 izin politikasını iliştirin:

Görsel 2 - AWS IAM kullanıcısı
Ardından "Güvenlik kimlik bilgileri" sekmesine gidin ve yeni bir erişim anahtarı çifti oluşturun. Erişim anahtarı kimliğini (Access key ID) ve Gizli erişim anahtarını (Secret access key) güvenli bir yerde sakladığınızdan emin olun – Amazon bu ekrandan sonra gizli anahtarı tekrar göstermeyecektir:

Görsel 3 - AWS IAM kullanıcı kimlik bilgileri
Şimdi terminalinizi açın ve aws configure komutunu çalıştırın. Dört bilgi istenecektir: Erişim anahtarı kimliğiniz, Gizli erişim anahtarınız, varsayılan bölge (ben eu-central-1 kullanıyorum) ve tercih edilen çıktı formatı (genellikle json):

Görsel 4 - AWS CLI yapılandırması
Her şeyin düzgün bağlandığından emin olmak için kimliğinizi aşağıdaki komutla doğrulayın:
aws sts get-caller-identity
Doğru yapılandırıldıysa, hesap ayrıntılarınızı göreceksiniz:

Görsel 5 - AWS CLI bağlantı testi komutu
Bir S3 kovası oluşturma
Son olarak, kopyalayacağınız dosyaları depolamak için bir S3 kovası oluşturmanız gerekir.
AWS Konsolunuzda S3 servis bölümüne gidin ve "Create bucket"'a tıklayın. Kova adlarının AWS genelinde benzersiz olması gerektiğini unutmayın. Ayırt edici bir ad seçin, şimdilik varsayılan ayarları bırakın ve "Create"'e tıklayın:

Görsel 6 - AWS kova oluşturma
Oluşturulduktan sonra yeni kovanız konsolda görünecektir. Varlığını komut satırından da doğrulayabilirsiniz:
aws s3 ls

Görsel 7 - Tüm mevcut S3 kovaları
Tüm S3 kovaları varsayılan olarak özel (private) yapılandırılır, bunu aklınızda bulundurun. Bu kovayı herkese açık dosyalar için kullanmayı düşünüyorsanız, kova ilkelerini buna göre değiştirmeniz gerekir.
aws s3 cp komutunu kullanarak dosya aktarmaya başlamak için artık tamamen hazırsınız. Hadi önce temellerle başlayalım.
Temel AWS S3 cp Komut Sözdizimi
Artık her şeyi yapılandırdığınıza göre, aws s3 cp komutunun temel kullanımına dalalım. AWS'de olduğu gibi, komut farklı dosya aktarım senaryolarını yönetebilse de güzellik sadeliktedir.
En temel haliyle, aws s3 cp komutu şu sözdizimini izler:
aws s3 cp <source> <destination> [options]
<source> ve <destination> yerel dosya yolları veya S3 URI'leri ( s3:// ile başlayan) olabilir. En yaygın üç kullanım durumunu inceleyelim.
Yerelden S3'e dosya kopyalama
Yerel sisteminizden bir S3 kovasına dosya kopyalamak için kaynak yerel bir yol, hedef ise bir S3 URI'si olacaktır:
aws s3 cp /Users/dradecic/Desktop/test_file.txt s3://testbucket-aws-cp-dradecic/test_file.txt
Bu komut, belirtilen dizindeki test_file.txt dosyasını ilgili S3 kovasına yükler. İşlem başarılı olursa, konsolda buna benzer bir çıktı görürsünüz:

Görsel 8 - Yerel dosya kopyalandıktan sonra konsol çıktısı
Ve AWS yönetim konsolunda, dosyanızın yüklendiğini görürsünüz:

Görsel 9 - S3 kovası içeriği
Benzer şekilde, yerel bir klasörü S3 kovanıza kopyalamak ve örneğin başka bir iç içe klasöre koymak isterseniz, buna benzer bir komut çalıştırın:
aws s3 cp /Users/dradecic/Desktop/test_folder s3://testbucket-aws-cp-dradecic/my-desired-folder/test_folder/ --recursive

Görsel 10 - Bir klasör yüklendikten sonra S3 kovası içeriği
--recursive bayrağı, klasör içindeki tüm dosya ve alt klasörlerin kopyalanmasını sağlar.
Şunu unutmayın - S3 aslında klasörlere sahip değildir – yol yapısı nesnenin anahtarının bir parçasıdır; ancak kavramsal olarak klasörler gibi çalışır.
S3'ten yerele dosya kopyalama
S3'ten yerel sisteminize dosya kopyalamak için sırayı tersine çevirin – kaynak S3 URI'si olur, hedef ise yerel yolunuz:
aws s3 cp s3://testbucket-aws-cp-dradecic/test_file.txt /Users/dradecic/Documents/s3-data/downloaded_test_file.txt
Bu komut, S3 kovanızdan test_file.txt dosyasını indirir ve belirtilen dizinde downloaded_test_file.txt adıyla kaydeder. Yerel sisteminizde hemen göreceksiniz:

Görsel 11 - S3'ten tek bir dosya indirme
Hedef dosya adını belirtmezseniz, komut özgün dosya adını kullanır:
aws s3 cp s3://testbucket-aws-cp-dradecic/test_file.txt .

Görsel 12 - İndirilen dosyanın içeriği
Nokta (.) mevcut dizininizi temsil eder, dolayısıyla bu komut test_file.txt dosyasını mevcut konumunuza indirir.
Ve son olarak, tüm bir dizini indirmek için buna benzer bir komut kullanabilirsiniz:
aws s3 cp s3://testbucket-aws-cp-dradecic/my-desired-folder/test_folder /Users/dradecic/Documents/test_folder --recursive

Görsel 13 - İndirilen klasörün içeriği
--recursive bayrağının, birden çok dosyayla çalışırken zorunlu olduğunu unutmayın – olmadan, kaynak bir dizinse komut başarısız olur.
Bu temel komutlarla, ihtiyaç duyacağınız dosya aktarım görevlerinin çoğunu halledebilirsiniz. Ancak bir sonraki bölümde, kopyalama süreci üzerinde daha iyi kontrol sağlayan gelişmiş seçenekleri öğreneceksiniz.
Gelişmiş AWS S3 cp Seçenekleri ve Özellikleri
AWS, dosya kopyalama işlemlerini en üst düzeye çıkarmanıza olanak tanıyan birkaç gelişmiş seçenek sunar. Bu bölümde, günlük işlerinizde yardımcı olacak en yararlı bayrak ve parametrelerden bazılarını göstereceğim.
--exclude ve --include bayraklarını kullanma
Bazen yalnızca belirli kalıplarla eşleşen dosyaları kopyalamak istersiniz. --exclude ve --include bayrakları, kalıplara göre dosyaları filtrelemenize olanak tanır ve neyin kopyalanacağı üzerinde hassas kontrol sağlar.
Zemin hazırlamak için, üzerinde çalıştığım dizin yapısı şu şekilde:

Görsel 14 - Dizin yapısı
Diyelim ki dizindeki .log dosyaları hariç tüm dosyaları kopyalamak istiyorsunuz:
aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --exclude "*.log"
Bu komut, advanced_folder dizinindeki tüm dosyaları .log uzantılı olanlar hariç S3'e kopyalar:

Görsel 15 - Klasör kopyalama sonuçları
Birden çok kalıbı da birleştirebilirsiniz. Diyelim ki projedeki yalnızca HTML ve CSS dosyalarını kopyalamak istiyorsunuz:
aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --exclude "*" --include "*.html" --include "*.css"
Bu komut önce her şeyi dışlar (--exclude "*"), ardından yalnızca .html ve .css uzantılı dosyaları dahil eder. Sonuç şu şekildedir:

Görsel 16 - Klasör kopyalama sonuçları (2)
Bayrakların sırasının önemli olduğunu unutmayın - AWS CLI bu bayrakları sırasıyla işler, bu nedenle --include'ı --exclude'dan önce koyarsanız farklı sonuçlar alırsınız:
aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --include "*.html" --include "*.css" --exclude "*"
Bu kez kovaya hiçbir şey kopyalanmadı:

Görsel 17 - Klasör kopyalama sonuçları (3)
S3 depolama sınıfını belirtme
Amazon S3, her biri farklı maliyet ve erişim özelliklerine sahip farklı depolama sınıfları sunar. Varsayılan olarak, aws s3 cp dosyaları Standard depolama sınıfına yükler; ancak --storage-class bayrağıyla farklı bir sınıf belirtebilirsiniz:
aws s3 cp /Users/dradecic/Desktop/large-archive.zip s3://testbucket-aws-cp-dradecic/archives/ --storage-class GLACIER
Bu komut, large-archive.zip dosyasını Glacier depolama sınıfına yükler; bu sınıf önemli ölçüde daha ucuzdur ancak erişim maliyetleri daha yüksek ve erişim süreleri daha uzundur:

Görsel 18 - Farklı depolama sınıflarıyla S3'e dosya kopyalama
Mevcut depolama sınıfları şunları içerir:
STANDARD(varsayılan): Yüksek dayanıklılık ve erişilebilirliğe sahip genel amaçlı depolama.REDUCED_REDUNDANCY(artık önerilmiyor): Daha düşük dayanıklılık, maliyet tasarruflu seçenek; artık kullanımdan kaldırılmıştır.STANDARD_IA(Seyrek Erişim): Daha seyrek erişilen veriler için daha düşük maliyetli depolama.ONEZONE_IA(Tek Bölge Seyrek Erişim): Tek bir AWS Kullanılabilirlik Bölgesinde daha düşük maliyetli, seyrek erişim depolama.INTELLIGENT_TIERING: Erişim kalıplarına göre verileri otomatik olarak katmanlar arasında taşır.GLACIER: Uzun süreli saklama için düşük maliyetli arşiv depolama; erişim dakikalar ila saatler içinde.DEEP_ARCHIVE: En ucuz arşiv depolama; erişim saatler içinde; uzun dönem yedekleme için ideal.
Hemen erişmeniz gerekmeyen dosyaları yedekliyorsanız, GLACIER veya DEEP_ARCHIVE kullanmak depolama maliyetlerinde önemli tasarruf sağlayabilir.
--exact-timestamps ile dosyaları senkronize etme
S3'te zaten var olan dosyaları güncellerken, yalnızca değişen dosyaları kopyalamak isteyebilirsiniz. --exact-timestamps bayrağı, kaynak ve hedef arasındaki zaman damgalarını karşılaştırarak buna yardımcı olur.
Örnek:
aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --exact-timestamps
Bu bayrakla, komut yalnızca zaman damgaları S3'teki dosyalardan farklıysa dosyaları kopyalar. Böylece büyük bir dosya kümesini düzenli olarak güncellerken aktarım süresini ve bant genişliği kullanımını azaltabilirsiniz.
Bu neden işe yarar? Uygulama dosyalarınızı değişmeyen varlıkları gereksiz yere aktarmadan güncellemek istediğiniz dağıtım senaryolarını hayal edin.
--exact-timestamps bir tür senkronizasyon yapmak için yararlı olsa da, daha gelişmiş bir çözüme ihtiyacınız varsa aws s3 cp yerine aws s3 sync kullanmayı düşünün. sync komutu dizinleri senkron tutmak için özel olarak tasarlanmıştır ve bu amaçla ek yeteneklere sahiptir. AWS S3 Sync eğitiminde sync komutu hakkında her şeyi yazdım.
Bu gelişmiş seçeneklerle artık S3 dosya işlemleriniz üzerinde çok daha ince ayar kontrolüne sahipsiniz. Belirli dosyaları hedefleyebilir, depolama maliyetlerini optimize edebilir ve dosyalarınızı verimli şekilde güncelleyebilirsiniz. Bir sonraki bölümde, bu işlemleri betikler ve zamanlanmış görevlerle nasıl otomatikleştireceğinizi öğreneceksiniz.
AWS S3 cp ile Dosya Aktarımlarını Otomatikleştirme
Şimdiye kadar, komut satırını kullanarak S3'e ve S3'ten dosyaları elle kopyalamayı öğrendiniz. aws s3 cp kullanmanın en büyük avantajlarından biri, bu aktarımları kolayca otomatikleştirebilmenizdir; bu da size ciddi zaman kazandırır.
aws s3 cp komutunu, müdahalesiz dosya aktarımları için betiklere ve zamanlanmış işlere nasıl entegre edebileceğinizi inceleyelim.
AWS S3 cp'yi betiklerde kullanma
İşte bir dizini S3'e yedekleyen, yedeğe zaman damgası ekleyen ve hata yönetimi ile dosyaya günlüğe kaydetmeyi uygulayan basit bir bash betiği örneği:
#!/bin/bash
# Set variables
SOURCE_DIR="/Users/dradecic/Desktop/advanced_folder"
BUCKET="s3://testbucket-aws-cp-dradecic/backups"
DATE=$(date +%Y-%m-%d-%H-%M)
BACKUP_NAME="backup-$DATE"
LOG_FILE="/Users/dradecic/logs/s3-backup-$DATE.log"
# Ensure the logs directory exists
mkdir -p "$(dirname "$LOG_FILE")"
# Create the backup and log the output
echo "Starting backup of $SOURCE_DIR to $BUCKET/$BACKUP_NAME" | tee -a $LOG_FILE
aws s3 cp $SOURCE_DIR $BUCKET/$BACKUP_NAME --recursive 2>&1 | tee -a $LOG_FILE
# Check if the backup was successful
if [ $? -eq 0 ]; then
echo "Backup completed successfully on $DATE" | tee -a $LOG_FILE
else
echo "Backup failed on $DATE" | tee -a $LOG_FILE
fi
Bunu backup.sh olarak kaydedin, chmod +x backup.sh ile çalıştırılabilir yapın ve yeniden kullanılabilir bir yedekleme betiğiniz olsun!
Ardından şu komutla çalıştırabilirsiniz:
./backup.sh

Görsel 19 - Terminalde betiğin çalışması
Hemen ardından, kovadaki backups klasörü dolacaktır:

Görsel 20 - S3 kovasında saklanan yedek
Bunu bir adım ileri götürelim ve betiği bir zamanlamayla çalıştıralım.
Cron işleriyle dosya aktarımlarını zamanlama
Artık bir betiğiniz olduğuna göre, bir sonraki adım onu belirli zamanlarda otomatik olarak çalışacak şekilde planlamaktır.
Linux veya macOS kullanıyorsanız, yedeklerinizi zamanlamak için cron kullanabilirsiniz. İşte yedekleme betiğinizi her gece yarısı çalıştıracak bir cron işinin nasıl kurulacağı:
1. Crontab'i düzenlemek için açın:
crontab -e
2. Betiğinizi her gece yarısı çalıştırmak için aşağıdaki satırı ekleyin:
0 0 * * * /path/to/your/backup.sh

Görsel 21 - Betiği günlük çalıştırmak için cron işi
Cron işlerinin formatı minute hour day-of-month month day-of-week command şeklindedir. İşte birkaç örnek daha:
- Her saat çalıştır:
0 * * * * /path/to/your/backup.sh - Her Pazartesi 09:00'da çalıştır:
0 9 * * 1 /path/to/your/backup.sh - Her ayın 1'inde çalıştır:
0 0 1 * * /path/to/your/backup.sh
Ve hepsi bu kadar! backup.sh betiği artık belirlenen aralıkta çalışacak.
S3 dosya aktarımlarınızı otomatikleştirmek doğru yaklaşımdır. Özellikle şu senaryolar için kullanışlıdır:
- Önemli verilerin günlük yedekleri
- Bir web sitesine ürün görsellerini senkronize etme
- Günlük dosyalarını uzun süreli depolamaya taşıma
- Güncellenmiş web sitesi dosyalarını yayımlama
Bu tür otomasyon teknikleri, elle müdahale olmadan dosya aktarımlarını yöneten güvenilir bir sistem kurmanıza yardımcı olur. Bir kez yazıp sonra unutabilirsiniz.
Bir sonraki bölümde, aws s3 cp işlemlerinizi daha güvenli ve verimli hale getirmek için en iyi uygulamalardan bahsedeceğim.
AWS S3 cp Kullanımı için En İyi Uygulamalar
aws s3 cp komutu kullanımı kolay olsa da, işler ters gidebilir.
En iyi uygulamaları takip ederseniz, yaygın tuzaklardan kaçınır, performansı optimize eder ve verilerinizi güvende tutarsınız. Dosya aktarım işlemlerinizi daha verimli hale getirmek için bu uygulamaları inceleyelim.
Verimli dosya yönetimi
S3 ile çalışırken, dosyalarınızı mantıksal olarak düzenlemek ileride size zaman ve zahmet kazandıracaktır.
Öncelikle, tutarlı bir kova ve önek (prefix) adlandırma kuralı belirleyin. Örneğin verilerinizi ortama, uygulamaya veya tarihe göre ayırabilirsiniz:
s3://company-backups/production/database/2023-03-13/
s3://company-backups/staging/uploads/2023-03/
Bu tür bir düzenleme şunları kolaylaştırır:
- İhtiyaç duyduğunuzda belirli dosyaları bulmak.
- Kova ilkelerini ve izinlerini doğru düzeyde uygulamak.
- Arşivleme veya eski verileri silme için yaşam döngüsü kuralları ayarlamak.
Bir başka ipucu: Büyük dosya kümelerini aktarırken, yüklemeden önce küçük dosyaları (zip veya tar kullanarak) bir araya getirmeyi düşünün. Bu, S3'e yapılan API çağrılarının sayısını azaltır; maliyetleri düşürür ve aktarımları hızlandırabilir.
# Instead of copying thousands of small log files
# tar them first, then upload
tar -czf example-logs-2025-03.tar.gz /var/log/application/
aws s3 cp example-logs-2025-03.tar.gz s3://testbucket-aws-cp-dradecic/logs/2025/03/
Büyük veri aktarımlarını yönetme
Büyük dosyaları veya aynı anda birçok dosyayı kopyalarken, süreci daha güvenilir ve verimli kılmak için birkaç teknik vardır.
--quiet bayrağını kullanarak betiklerde çıktıyı azaltabilirsiniz:
aws s3 cp large-directory/ s3://testbucket-aws-cp-dradecic/backups/ --recursive --quiet
Bu, her dosya için ilerleme bilgisini bastırır; günlükleri daha yönetilebilir kılar. Ayrıca performansı da az da olsa iyileştirir.
Çok büyük dosyalar için, --multipart-threshold bayrağıyla çok parçalı yüklemeleri kullanmayı düşünün:
aws s3 cp huge-file.iso s3://testbucket-aws-cp-dradecic/backups/ --multipart-threshold 100MB
Yukarıdaki ayar, AWS CLI'a 100MB'den büyük dosyaları yükleme için birden çok parçaya bölmesini söyler. Bunun birkaç faydası vardır:
- Bağlantı koparsa yalnızca etkilenen parça yeniden denenir.
- Parçalar paralel yüklenebilir; bu da aktarım hızını artırabilir.
- Büyük yüklemeleri duraklatıp sürdürebilirsiniz.
Bölgeler arası veri aktarırken daha hızlı yüklemeler için S3 Transfer Acceleration kullanmayı düşünün:
aws s3 cp large-file.zip s3://testbucket-aws-cp-dradecic/backups/ --endpoint-url https://s3-accelerate.amazonaws.com
Bu, aktarımınızı Amazon'un uç (edge) ağı üzerinden yönlendirir ve bölgeler arası aktarımları önemli ölçüde hızlandırabilir.
Güvenliği sağlama
Buluttaki verilerinizle çalışırken güvenlik her zaman en öncelikli konu olmalıdır.
Öncelikle IAM izinlerinizin asgari ayrıcalık ilkesini takip ettiğinden emin olun. Her görev için yalnızca gerekli izinleri verin.
Kullanıcıya atayabileceğiniz örnek bir ilke:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::testbucket-aws-cp-dradecic/backups/*"
}
]
}
Bu ilke, yalnızca "my-bucket" içindeki "backups" önekine dosya kopyalamaya ve oradan dosya çekmeye izin verir.
Güvenliği artırmanın ek bir yolu da hassas veriler için şifrelemeyi etkinleştirmektir. Yüklerken sunucu tarafı şifrelemeyi belirtebilirsiniz:
aws s3 cp confidential.docx s3://testbucket-aws-cp-dradecic/ --sse AES256
Veya daha fazla güvenlik için AWS Key Management Service (KMS) kullanın:
aws s3 cp secret-data.json s3://testbucket-aws-cp-dradecic/ --sse aws:kms --sse-kms-key-id myKMSKeyId
Bununla birlikte, yüksek derecede hassas işlemler için S3 için VPC uç noktalarını kullanmayı düşünün. Bu, trafiğinizi AWS ağı içinde tutar ve tamamen genel internetten kaçınır.
Bir sonraki bölümde, bu komutla çalışırken karşılaşabileceğiniz yaygın sorunları nasıl çözeceğinizi öğreneceksiniz.
AWS S3 cp Hatalarını Giderme
Bir şey kesin - aws s3 cp ile çalışırken ara sıra sorunlarla karşılaşacaksınız. Ancak yaygın hataları ve çözümlerini anlarsanız, işler planlandığı gibi gitmediğinde zaman ve sinir tasarrufu sağlarsınız.
Bu bölümde, en sık rastlanan sorunları ve nasıl düzelteceğinizi göstereceğim.
Yaygın hatalar ve çözümleri
Hata: "Access Denied"
Muhtemelen en sık karşılaşacağınız hata budur:
upload failed: ./myfile.txt to s3://testbucket-aws-cp-dradecic/myfile.txt An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
Genellikle üç şeyden birini ifade eder:
- IAM kullanıcınızın işlemi gerçekleştirmek için yeterli izni yok.
- Kova ilkesi erişimi kısıtlıyor.
- AWS kimlik bilgilerinizin süresi dolmuş.
Sorun gidermek için:
- Yüklemeler için
s3:PutObject, indirmeler içins3:GetObjectizinlerine sahip olduğunuzu doğrulamak üzere IAM izinlerinizi kontrol edin. - Kova ilkesinin eylemlerinizi kısıtlamadığını doğrulayın.
- Kimlik bilgilerinizin süresi dolduysa güncellemek için
aws configurekomutunu çalıştırın.
Hata: "No such file or directory"
Bu hata, kopyalamaya çalıştığınız yerel dosya veya dizin mevcut olmadığında oluşur:
upload failed: ./missing-file.txt to s3://testbucket-aws-cp-dradecic/missing-file.txt An error occurred (404) when calling the PutObject operation: Not Found
Çözüm basit - dosya yollarınızı dikkatlice kontrol edin. Yollar büyük/küçük harfe duyarlıdır, bunu unutmayın. Ayrıca göreli yolları kullanırken doğru dizinde olduğunuzdan emin olun.
Hata: "The specified bucket does not exist"
Bu hatayı görürseniz:
upload failed: ./myfile.txt to s3://testbucket-aws-cp-dradecic/myfile.txt An error occurred (NoSuchBucket) when calling the PutObject operation: The specified bucket does not exist
Şunları kontrol edin:
- Kova adınızda yazım hatası olup olmadığı.
- Doğru AWS bölgesini kullanıp kullanmadığınız.
- Kovanın gerçekten var olup olmadığı (silinmiş olabilir).
Doğru adı doğrulamak için tüm kovalarınızı aws s3 ls ile listeleyebilirsiniz.
Hata: "Connection timed out"
Ağ sorunları bağlantı zaman aşımına neden olabilir:
upload failed: ./largefile.zip to s3://testbucket-aws-cp-dradecic/largefile.zip An error occurred (RequestTimeout) when calling the PutObject operation: Request timeout
Bunu çözmek için:
- İnternet bağlantınızı kontrol edin.
- Daha küçük dosyalar kullanmayı deneyin veya büyük dosyalar için çok parçalı yüklemeleri etkinleştirin.
- Daha iyi performans için AWS Transfer Acceleration kullanmayı düşünün.
Yükleme hatalarını yönetme
Büyük dosyaları aktarırken hatalarla karşılaşma olasılığı daha yüksektir. Bu durumda, hataları zarifçe ele almaya çalışın.
Örneğin, betiklerde hata teşhisini kolaylaştırmak için --only-show-errors bayrağını kullanabilirsiniz:
aws s3 cp large-directory/ s3://testbucket-aws-cp-dradecic/ --recursive --only-show-errors
Bu, başarılı aktarım mesajlarını bastırır ve yalnızca hataları gösterir; böylece büyük aktarımlarda sorun gidermeyi çok daha kolay hale getirir.
Yarım kalan aktarımları ele almak için, --recursive komutu hedefte aynı boyutta zaten var olan dosyaları otomatik olarak atlar. Ancak daha kapsamlı olmak adına, bu ortam değişkenlerini ayarlayarak AWS CLI'ın yerleşik yeniden denemelerini ağ sorunları için kullanabilirsiniz:
export AWS_RETRY_MODE=standard
export AWS_MAX_ATTEMPTS=5
aws s3 cp large-file.zip s3://testbucket-aws-cp-dradecic/
Bu, AWS CLI'a başarısız işlemleri en fazla 5 kez otomatik olarak yeniden denemesini söyler.
Ancak çok büyük veri kümeleri için, cp yerine aws s3 sync kullanmayı düşünün; çünkü kesintileri daha iyi yönetmek üzere tasarlanmıştır:
aws s3 sync large-directory/ s3://testbucket-aws-cp-dradecic/large-directory/
sync komutu, hedefte zaten bulunanlardan farklı olan dosyaları yalnızca aktarır; bu da yarım kalan büyük aktarımları sürdürmek için mükemmeldir.
Bu yaygın hataları anlarsanız ve betiklerinize uygun hata yönetimi uygularsanız, S3 kopyalama işlemleriniz çok daha sağlam ve güvenilir hale gelir.
AWS S3 cp'yi özetlemek
Sonuç olarak, aws s3 cp komutu yerel dosyaları S3'e ve tersine kopyalamak için tek adresli bir çözümdür.
Bu yazıda bununla ilgili her şeyi öğrendiniz. Temellerden ve ortam yapılandırmasından başladınız, dosya kopyalama için zamanlanmış ve otomatikleştirilmiş betikler yazmaya kadar ilerlediniz. Ayrıca özellikle büyük dosyaları taşırken bazı yaygın hatalar ve zorluklarla nasıl başa çıkacağınızı da öğrendiniz.
Dolayısıyla bir geliştirici, veri profesyoneli veya sistem yöneticisiyseniz, bu komutun faydalı olduğunu göreceğinizi düşünüyorum. Komutla rahat etmenin en iyi yolu onu düzenli olarak kullanmaktır. Temelleri anladığınızdan emin olun ve ardından işinizin sıkıcı kısımlarını otomatikleştirmeye biraz zaman ayırın.
AWS hakkında daha fazla bilgi edinmek için DataCamp'in şu kurslarını takip edin:
DataCamp'i AWS sertifikasyon sınavlarına hazırlanmak için de kullanabilirsiniz - AWS Cloud Practitioner (CLF-C02).
SSS
aws s3 cp komutu nedir ve ne için kullanılabilir?
aws s3 cp komutu, AWS Komut Satırı Arayüzü içinde yer alan ve yerel sisteminiz ile Amazon S3 depolaması arasında dosya kopyalamanıza olanak tanıyan bir yardımcı programdır. Standart Linux cp komutuna benzer tanıdık bir komut satırı deneyimi sunmak üzere tasarlanmıştır; ancak S3 kovalarıyla etkileşime göre uyarlanmıştır. Çift yönlü aktarımlar, tüm dizinlerin yinelemeli kopyalanması, kalıplara göre dosya filtreleme ve hatta maliyet optimizasyonu için farklı depolama sınıflarının belirtilmesi gibi amaçlarla kullanabilirsiniz. S3 kovalarındaki verileri verimli şekilde yönetmesi gereken DevOps mühendisleri, veri bilimcileri ve sistem yöneticileri için özellikle kullanışlıdır.
aws s3 cp komutunu kullanmak için AWS CLI'ı nasıl kurarım?
aws s3 cp komutunu kullanmak için AWS CLI kurulumunu yapmak; sisteminize AWS CLI'ı kurmayı, AWS kimlik bilgilerinizle yapılandırmayı ve bir S3 kovası oluşturmayı içerir. Kurulum süreci işletim sisteminize (Windows, Linux veya macOS) göre biraz değişir. Kurulumdan sonra aws configure komutunu çalıştırmalı ve Erişim anahtarı kimliği (Access key ID), Gizli erişim anahtarı (Secret access key), varsayılan bölge ve tercih edilen çıktı formatını sağlamalısınız. Son olarak, bir S3 kovasını AWS Yönetim Konsolu üzerinden veya doğrudan AWS CLI kullanarak oluşturmanız gerekir.
aws s3 cp için temel sözdizimi ve yaygın kullanım durumları nelerdir?
aws s3 cp için temel sözdizimi aws s3 cp <source> <destination> [options] şeklindedir; burada kaynak ve hedef yerel dosya yolları veya S3 URI'leri ( s3:// ile başlayan) olabilir. Yaygın kullanım durumları arasında yerel sisteminizden S3'e dosya yükleme, S3'ten yerel sisteminize dosya indirme ve --recursive bayrağını kullanarak tüm dizinleri yinelemeli olarak kopyalama yer alır. Ayrıca komutla farklı S3 kovaları arasında dosya kopyalayabilir, hedef dosyalar için farklı adlar belirtebilir ve kovalarınız içinde iç içe "klasör" yapılarında dosyaları düzenleyebilirsiniz.
Belirli dosyaları filtrelemek için --exclude ve --include bayraklarını nasıl kullanabilirim?
--exclude ve --include bayrakları, aws s3 cp kullanırken kalıplara göre dosyaları filtrelemenizi sağlar ve kopyalanacaklar üzerinde hassas kontrol sunar. Örneğin, belirli uzantılara sahip olanlar hariç bir dizindeki tüm dosyaları kopyalayabilir (ör. --exclude "*.log") ya da önce her şeyi dışlayıp (--exclude "*"), yalnızca belirli dosya türlerini hedefleyebilirsiniz (ör. --include "*.html" --include "*.css"). Bu bayrakların sırası önemli ölçüde etkilidir; AWS CLI bunları sırasıyla işler. Bu sayede karmaşık dosya aktarım senaryoları için gelişmiş filtreleme kuralları oluşturabilirsiniz.
--exact-timestamps ile aws s3 cp ve aws s3 sync arasındaki fark nedir?
Her iki komut da S3'teki dosyaları güncellemek için kullanılabilse de amaç ve davranışları farklıdır. --exact-timestamps bayrağıyla aws s3 cp, yalnızca zaman damgaları S3'tekilerden farklı olan dosyaları kopyalar; bu da dosyaları güncellerken aktarım süresi ve bant genişliği kullanımını azaltabilir. Ancak aws s3 sync, dizinleri senkron tutmak için özel olarak tasarlanmıştır ve daha gelişmiş senkronizasyon yetenekleri sunar. Büyük dosya kümelerini düzenli olarak güncellemeniz ve yalnızca değişenleri aktarmanız gerekiyorsa, genellikle aws s3 sync daha iyi bir seçenektir; yine de basit senkronizasyon ihtiyaçları için --exact-timestamps ile aws s3 cp işe yarayabilir.

