Cursus
Bestanden handmatig naar AWS-opslag kopiëren kan tijdrovend, foutgevoelig en inefficiënt zijn - zeker bij grote hoeveelheden data. Dat wil je niet.
De AWS Command Line Interface (CLI) biedt een handige tool, aws s3 cp, die dit proces vereenvoudigt. Met deze opdracht kun je bestanden naar en van Amazon S3-buckets kopiëren met eenvoudige, scriptbare commando's die op alle besturingssystemen werken. De AWS CLI bespaart niet alleen tijd, maar maakt ook automatisering van routinematige bestandsoverdrachten mogelijk.
De opdracht aws s3 cp biedt veel opties voor complexe overdrachtscenario's. Je kunt individuele bestanden kopiëren, hele mappenstructuren recursief overzetten, bestanden filteren op patronen en zelfs verschillende opslagklassen opgeven voor kostenoptimalisatie.
In deze tutorial neem ik je mee door alles wat je moet weten om aws s3 cp effectief te gebruiken, van basiscommando's tot geavanceerde technieken en automatiseringsstrategieën.
> Nieuw bij AWS en onzeker over cloudopslag en S3? Onze detaille gids over S3 en EFS is de perfecte plek om te beginnen. Ben je specifiek geïnteresseerd in S3, bekijk dan onze uitgebreide S3-gids.
Wat is AWS S3 cp?
De opdracht aws s3 cp is een hulpprogramma binnen de AWS Command Line Interface waarmee je bestanden kunt kopiëren tussen je lokale systeem en Amazon S3-opslag.
Kort gezegd biedt het een vertrouwde commandline-ervaring, vergelijkbaar met de standaard Linux-opdracht cp, maar dan afgestemd op interactie met S3-buckets.
In de kern verbindt aws s3 cp je lokale machine met de cloudopslaginfrastructuur van AWS. Wanneer je een aws s3 cp-opdracht uitvoert, regelt de AWS CLI authenticatie en opdeling in chunks voor grote overdrachten en waarborgt dataintegriteit tijdens het kopiëren. Deze tool ondersteunt het kopiëren van losse bestanden, meerdere bestanden met wildcards en complete mappenstructuren met recursieve operaties.
De aws s3 cp kan veel, ik noem er een paar:
- Bidirectionele overdrachten (uploaden naar S3 of downloaden van S3).
- Recursief kopiëren van volledige mappenstructuren.
- Ondersteuning voor diverse S3-opslagklassen (Standard, Intelligent-Tiering, Glacier, enz.).
- Bestandsfiltering met include-/exclude-patronen.
- Behoud van bestandsmetadata tijdens overdrachten.
- Integratie met AWS Identity and Access Management (IAM) voor beveiliging.
De kracht van aws s3 cp zit echter in de flexibiliteit en integratie met het AWS-ecosysteem. Je kunt parameters opgeven om zaken als opslagklasse, versleuteling, metadata, toegangsbeheer en meer te sturen. Daardoor is het geschikt voor alles: van simpele eenmalige kopieeracties tot complexe, geautomatiseerde back-upoplossingen.
De opdracht verschilt van het gebruik van de AWS Management Console, waar je handmatig navigeert en klikt. De opdracht aws s3 cp kun je rechtstreeks vanuit je terminal uitvoeren of opnemen in scripts en geautomatiseerde workflows. Deze programmatische toegang tot S3 is essentieel voor veel techprofessionals, vooral DevOps-engineers en data scientists.
Kortom, aws s3 cp biedt een betrouwbare, scriptbare oplossing die enorme overdrachten aankan met behoud van performance. Het kan onderbroken uploads en downloads hervatten, wat het extra nuttig maakt bij instabiele netwerkverbindingen of extreem grote bestanden.
Straks neem ik je mee door het saaie gedeelte - het instellen van de AWS CLI op je systeem.
De AWS CLI en AWS S3 instellen
Voordat je met de opdracht aws s3 cp aan de slag gaat, moet de AWS CLI op je systeem zijn geïnstalleerd en correct geconfigureerd. Geen zorgen als je nog nooit met AWS hebt gewerkt - de setup is eenvoudig en duurt minder dan 10 minuten.
Ik deel het op in drie eenvoudige stappen: de AWS CLI-tool installeren, je inloggegevens configureren en je eerste S3-bucket voor opslag aanmaken.
De AWS CLI installeren
Het installatieproces verschilt licht per besturingssysteem.
Voor Windows-systemen:
- Ga naar de officiële AWS CLI documentatiepagina
- Download de 64-bit Windows-installer
- Start het gedownloade bestand en volg de installatiewizard
Voor Linux-systemen:
Voer de volgende drie commando's uit in de Terminal:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
Voor macOS-systemen:
Als je Homebrew hebt geïnstalleerd, voer dan deze ene regel uit in de Terminal:
brew install awscli
Heb je geen Homebrew, gebruik dan in plaats daarvan deze twee commando's:
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
Om te bevestigen dat de installatie gelukt is, voer je aws --version uit in je terminal. Je zou zoiets als dit moeten zien:

Afbeelding 1 - AWS CLI-versie
De AWS CLI configureren
Met de CLI geïnstalleerd is het tijd om je AWS-referenties voor authenticatie in te stellen.
Ga eerst naar je AWS-account en navigeer naar het IAM-dashboard. Maak een nieuwe gebruiker met programmatic access en koppel de juiste S3-machtigingenpolicy:

Afbeelding 2 - AWS IAM-gebruiker
Ga vervolgens naar het tabblad "Security credentials" en genereer een nieuw access key-paar. Sla zowel de Access key ID als de Secret access key ergens veilig op – Amazon toont de secret key na dit scherm niet meer:

Afbeelding 3 - AWS IAM-gebruikersgegevens
Open nu je terminal en voer het commando aws configure uit. Je wordt om vier gegevens gevraagd: je Access key ID, Secret access key, standaardregio (ik gebruik eu-central-1) en het gewenste uitvoerformaat (meestal json):

Afbeelding 4 - Configuratie van de AWS CLI
Controleer met het volgende commando of alles correct is gekoppeld en verifieer je identiteit:
aws sts get-caller-identity
Als alles goed is geconfigureerd, zie je je accountgegevens:

Afbeelding 5 - AWS CLI testverbinding-commando
Een S3-bucket aanmaken
Tot slot moet je een S3-bucket aanmaken om de bestanden op te slaan die je gaat kopiëren.
Ga naar de S3-sectie in je AWS Console en klik op "Create bucket". Onthoud dat buckernamen wereldwijd uniek moeten zijn binnen AWS. Kies een onderscheidende naam, laat de standaardinstellingen staan en klik op "Create":

Afbeelding 6 - Aanmaken van een AWS-bucket
Na het aanmaken verschijnt je nieuwe bucket in de console. Je kunt het bestaan ook via de commandline bevestigen:
aws s3 ls

Afbeelding 7 - Alle beschikbare S3-buckets
Alle S3-buckets zijn standaard privé geconfigureerd, dus houd hier rekening mee. Als je de bucket voor openbaar toegankelijke bestanden wilt gebruiken, moet je de bucket policies dienovereenkomstig aanpassen.
Je bent nu helemaal klaar om de opdracht aws s3 cp te gebruiken voor bestandoverdracht. Laten we beginnen met de basis.
Basis-syntaxis van de AWS S3 cp-opdracht
Nu alles geconfigureerd is, duiken we in het basisgebruik van de opdracht aws s3 cp. Zoals vaak bij AWS zit de kracht in de eenvoud, ook al kan de opdracht uiteenlopende overdrachtsscenario's aan.
In de meest eenvoudige vorm volgt aws s3 cp deze syntaxis:
aws s3 cp <source> <destination> [options]
Waarbij <source> en <destination> lokale paden of S3-URI's kunnen zijn (beginnend met s3://). Laten we de drie meest voorkomende use-cases verkennen.
Een bestand van lokaal naar S3 kopiëren
Om een bestand van je lokale systeem naar een S3-bucket te kopiëren, is de bron een lokaal pad en de bestemming een S3-URI:
aws s3 cp /Users/dradecic/Desktop/test_file.txt s3://testbucket-aws-cp-dradecic/test_file.txt
Dit commando uploadt het bestand test_file.txt vanuit de opgegeven map naar de aangegeven S3-bucket. Als de operatie is gelukt, zie je console-uitvoer zoals deze:

Afbeelding 8 - Console-uitvoer na het kopiëren van het lokale bestand
En op de AWS Management Console zie je je bestand geüpload staan:

Afbeelding 9 - Inhoud van de S3-bucket
Wil je op dezelfde manier een lokale map naar je S3-bucket kopiëren en bijvoorbeeld in een geneste map plaatsen, voer dan een vergelijkbaar commando uit:
aws s3 cp /Users/dradecic/Desktop/test_folder s3://testbucket-aws-cp-dradecic/my-desired-folder/test_folder/ --recursive

Afbeelding 10 - Inhoud van de S3-bucket na uploaden van een map
De vlag --recursive zorgt ervoor dat alle bestanden en submappen in de map worden gekopieerd.
Onthoud wel: S3 heeft in feite geen mappen – de padstructuur is onderdeel van de objectkey, maar het werkt conceptueel als mappen.
Een bestand van S3 naar lokaal kopiëren
Om een bestand van S3 naar je lokale systeem te kopiëren, draai je de volgorde om – de bron is de S3-URI en de bestemming je lokale pad:
aws s3 cp s3://testbucket-aws-cp-dradecic/test_file.txt /Users/dradecic/Documents/s3-data/downloaded_test_file.txt
Dit commando downloadt test_file.txt uit je S3-bucket en slaat het op als downloaded_test_file.txt in de opgegeven map. Je ziet het direct op je lokale systeem verschijnen:

Afbeelding 11 - Een enkel bestand downloaden van S3
Als je de bestandsnaam voor de bestemming weglaat, gebruikt het commando de oorspronkelijke bestandsnaam:
aws s3 cp s3://testbucket-aws-cp-dradecic/test_file.txt .

Afbeelding 12 - Inhoud van het gedownloade bestand
De punt (.) staat voor je huidige map, dus hiermee download je test_file.txt naar je huidige locatie.
En tot slot, om een hele map te downloaden, kun je een commando zoals dit gebruiken:
aws s3 cp s3://testbucket-aws-cp-dradecic/my-desired-folder/test_folder /Users/dradecic/Documents/test_folder --recursive

Afbeelding 13 - Inhoud van de gedownloade map
Onthoud dat de vlag --recursive essentieel is als je met meerdere bestanden werkt – zonder deze vlag mislukt het commando als de bron een map is.
Met deze basiscommando's kun je al het grootste deel van je overdrachtstaken uitvoeren. In de volgende sectie leer je geavanceerde opties die je meer controle over het kopieerproces geven.
Geavanceerde opties en functies van AWS S3 cp
AWS biedt een aantal geavanceerde opties om je kopieeroperaties te maximaliseren. In deze sectie laat ik de meest nuttige vlaggen en parameters zien voor je dagelijkse werk.
De vlaggen --exclude en --include gebruiken
Soms wil je alleen bepaalde bestanden kopiëren die aan specifieke patronen voldoen. Met de vlaggen --exclude en --include kun je op patronen filteren en krijg je nauwkeurige controle over wat er wordt gekopieerd.
Om het kader te schetsen: dit is de mappenstructuur waarmee ik werk:

Afbeelding 14 - Mappenstructuur
Stel dat je nu alle bestanden uit de map wilt kopiëren behalve de .log-bestanden:
aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --exclude "*.log"
Dit commando kopieert alle files uit de map advanced_folder naar S3, met uitzondering van bestanden met de extensie .log:

Afbeelding 15 - Resultaten van mapkopie
Je kunt ook meerdere patronen combineren. Stel dat je alleen de HTML- en CSS-bestanden uit de projectmap wilt kopiëren:
aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --exclude "*" --include "*.html" --include "*.css"
Dit commando sluit eerst alles uit (--exclude "*") en neemt daarna alleen bestanden met de extensies .html en .css op. Het resultaat ziet er zo uit:

Afbeelding 16 - Resultaten van mapkopie (2)
Onthoud dat de volgorde van de vlaggen uitmaakt - de AWS CLI verwerkt ze sequentieel, dus als je --include vóór --exclude zet, krijg je andere resultaten:
aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --include "*.html" --include "*.css" --exclude "*"
Deze keer is er niets naar de bucket gekopieerd:

Afbeelding 17 - Resultaten van mapkopie (3)
De S3-opslagklasse specificeren
Amazon S3 biedt verschillende opslagklassen, elk met eigen kosten en ophaalkenmerken. Standaard uploadt aws s3 cp naar de opslagklasse Standard, maar je kunt met de vlag --storage-class een andere klasse opgeven:
aws s3 cp /Users/dradecic/Desktop/large-archive.zip s3://testbucket-aws-cp-dradecic/archives/ --storage-class GLACIER
Dit commando uploadt large-archive.zip naar de Glacier-opslagklasse, die aanzienlijk goedkoper is maar hogere ophaalkosten en langere ophaaltijden heeft:

Afbeelding 18 - Bestanden naar S3 kopiëren met verschillende opslagklassen
De beschikbare opslagklassen zijn onder andere:
STANDARD(standaard): Algemene opslag met hoge duurzaamheid en beschikbaarheid.REDUCED_REDUNDANCY(niet meer aanbevolen): Lagere duurzaamheid, kostenbesparend, nu verouderd.STANDARD_IA(Infrequent Access): Lagere kosten voor data die minder vaak wordt benaderd.ONEZONE_IA(Single Zone Infrequent Access): Lagere kosten, infrequente toegang in één AWS Availability Zone.INTELLIGENT_TIERING: Verplaatst data automatisch tussen lagen op basis van toegangsprofielen.GLACIER: Lagekostenarchief voor langdurige bewaring, ophalen binnen minuten tot uren.DEEP_ARCHIVE: Goedkoopste archief, ophalen binnen uren, ideaal voor langetermijnback-up.
Als je back-ups maakt van bestanden die je niet direct nodig hebt, kunnen GLACIER of DEEP_ARCHIVE flink schelen in opslagkosten.
Bestanden syncen met de vlag --exact-timestamps
Als je bestanden in S3 bijwerkt die al bestaan, wil je misschien alleen gewijzigde bestanden kopiëren. De vlag --exact-timestamps helpt daarbij door timestamps tussen bron en bestemming te vergelijken.
Hier is een voorbeeld:
aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --exact-timestamps
Met deze vlag kopieert het commando alleen bestanden als hun timestamps afwijken van wat al in S3 staat. Dit kan overdrachtstijd en bandbreedte besparen wanneer je regelmatig een grote set bestanden bijwerkt.
Waarom is dit handig? Denk aan deployments waarbij je je applicatiebestanden wilt updaten zonder ongewijzigde assets onnodig over te zetten.
Hoewel --exact-timestamps nuttig is voor een vorm van synchronisatie, kun je voor een geavanceerdere oplossing beter aws s3 sync gebruiken in plaats van aws s3 cp. De opdracht sync is specifiek ontworpen om mappen synchroon te houden en heeft extra mogelijkheden hiervoor. Ik schreef alles over de sync-opdracht in de AWS S3 Sync-tutorial.
Met deze geavanceerde opties heb je nu veel fijnmaziger controle over je S3-bestandsoperaties. Je kunt specifieke bestanden richten, opslagkosten optimaliseren en bestanden efficiënt bijwerken. In de volgende sectie leer je hoe je deze operaties automatiseert met scripts en geplande taken.
Bestandoverdrachten automatiseren met AWS S3 cp
Tot nu toe heb je geleerd hoe je handmatig bestanden naar en van S3 kopieert via de commandline. Een van de grootste voordelen van aws s3 cp is dat je deze overdrachten eenvoudig kunt automatiseren, wat je enorm veel tijd bespaart.
Laten we bekijken hoe je de opdracht aws s3 cp integreert in scripts en geplande jobs voor handsfree bestandoverdracht.
AWS S3 cp gebruiken in scripts
Hier is een eenvoudig bashscript dat een map naar S3 back-upt, een timestamp toevoegt en foutafhandeling en logging naar een bestand implementeert:
#!/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
Sla dit op als backup.sh, maak het uitvoerbaar met chmod +x backup.sh, en je hebt een herbruikbaar back-upscript!
Je kunt het daarna uitvoeren met het volgende commando:
./backup.sh

Afbeelding 19 - Script draait in de terminal
Direct daarna wordt de map backups in de bucket gevuld:

Afbeelding 20 - Back-up opgeslagen in S3-bucket
Laten we dit naar een hoger niveau tillen door het script op een schema te draaien.
Bestandoverdrachten plannen met cronjobs
Nu je een script hebt, is de volgende stap om het automatisch op specifieke tijden te laten draaien.
Op Linux of macOS kun je cron gebruiken om je back-ups te plannen. Zo stel je een cronjob in om je back-upscript elke dag om middernacht uit te voeren:
1. Open je crontab om te bewerken:
crontab -e
2. Voeg de volgende regel toe om je script dagelijks om middernacht te draaien:
0 0 * * * /path/to/your/backup.sh

Afbeelding 21 - Cronjob om script dagelijks te draaien
Het formaat van cronjobs is minute hour day-of-month month day-of-week command. Enkele extra voorbeelden:
- Elk uur draaien:
0 * * * * /path/to/your/backup.sh - Elke maandag om 9:00:
0 9 * * 1 /path/to/your/backup.sh - Op de 1e van elke maand:
0 0 1 * * /path/to/your/backup.sh
En dat is het! Het script backup.sh draait nu volgens het ingestelde interval.
Het automatiseren van je S3-bestandoverdrachten is de manier om te gaan. Het is vooral handig voor scenario's zoals:
- Dagelijkse back-ups van belangrijke data
- Productafbeeldingen syncen naar een website
- Logbestanden naar langetermijnopslag verplaatsen
- Geüpdatete websitebestanden deployen
Met dit soort automatisering zet je een betrouwbaar systeem op dat bestandoverdrachten zonder handwerk afhandelt. Je schrijft het één keer, en daarna heb je er geen omkijken meer naar.
In de volgende sectie behandel ik best practices om je aws s3 cp-operaties veiliger en efficiënter te maken.
Best practices voor het gebruik van AWS S3 cp
Hoewel de opdracht aws s3 cp eenvoudig te gebruiken is, kan er van alles misgaan.
Door best practices te volgen voorkom je veelvoorkomende valkuilen, optimaliseer je de performance en houd je je data veilig. Laten we deze praktijken doornemen om je bestandoverdrachten efficiënter te maken.
Efficiënt bestandsbeheer
Als je met S3 werkt, bespaart een logische organisatie van je bestanden je later veel tijd en hoofdpijn.
Stel om te beginnen een consistente naamgevingsconventie voor buckets en prefixen op. Je kunt je data bijvoorbeeld scheiden per omgeving, applicatie of datum:
s3://company-backups/production/database/2023-03-13/
s3://company-backups/staging/uploads/2023-03/
Deze manier van organiseren maakt het makkelijker om:
- Specifieke bestanden te vinden wanneer je ze nodig hebt.
- Bucket policies en permissies op het juiste niveau toe te passen.
- Lifecycle-regels in te stellen voor archiveren of verwijderen van oude data.
Nog een tip: groepeer kleine bestanden eerst (met zip of tar) voordat je grote sets bestanden overdraagt. Zo verlaag je het aantal API-calls naar S3, wat kosten kan besparen en overdrachten versnelt.
# 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/
Grote dataoverdrachten afhandelen
Als je grote bestanden of veel bestanden tegelijk kopieert, zijn er technieken om het proces betrouwbaarder en efficiënter te maken.
Je kunt de vlag --quiet gebruiken om uitvoer te beperken bij gebruik in scripts:
aws s3 cp large-directory/ s3://testbucket-aws-cp-dradecic/backups/ --recursive --quiet
Dit onderdrukt de voortgangsinformatie per bestand, wat logs overzichtelijker maakt. Het verbetert ook de performance licht.
Voor zeer grote bestanden kun je multipart-uploads gebruiken met de vlag --multipart-threshold:
aws s3 cp huge-file.iso s3://testbucket-aws-cp-dradecic/backups/ --multipart-threshold 100MB
Bovenstaande instelling vertelt de AWS CLI om bestanden groter dan 100MB op te splitsen in meerdere delen voor upload. Dat heeft een paar voordelen:
- Als de verbinding wegvalt, hoeft alleen het getroffen deel opnieuw te proberen.
- Delen kunnen parallel worden geüpload, wat de doorvoer kan verhogen.
- Je kunt grote uploads pauzeren en hervatten.
Bij overdracht tussen regio's kun je S3 Transfer Acceleration gebruiken voor snellere uploads:
aws s3 cp large-file.zip s3://testbucket-aws-cp-dradecic/backups/ --endpoint-url https://s3-accelerate.amazonaws.com
Hiermee routeer je de overdracht via het edge-netwerk van Amazon, wat cross-region-overdrachten aanzienlijk kan versnellen.
Zorgen voor beveiliging
Beveiliging moet altijd prioriteit hebben wanneer je met data in de cloud werkt.
Zorg er om te beginnen voor dat IAM-permissies het principe van least privilege volgen. Geef alleen de specifieke rechten die voor elke taak nodig zijn.
Hier is een voorbeeldpolicy die je aan de gebruiker kunt toewijzen:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::testbucket-aws-cp-dradecic/backups/*"
}
]
}
Deze policy staat toe om bestanden te kopiëren naar en van alleen de "backups"-prefix in "my-bucket".
Een extra manier om de beveiliging te verhogen is door versleuteling in te schakelen voor gevoelige data. Je kunt server-side encryption opgeven bij het uploaden:
aws s3 cp confidential.docx s3://testbucket-aws-cp-dradecic/ --sse AES256
Of, voor meer beveiliging, gebruik AWS Key Management Service (KMS):
aws s3 cp secret-data.json s3://testbucket-aws-cp-dradecic/ --sse aws:kms --sse-kms-key-id myKMSKeyId
Voor zeer gevoelige operaties kun je echter VPC-endpoints voor S3 overwegen. Hierdoor blijft je verkeer binnen het AWS-netwerk en vermijd je het publieke internet volledig.
In de volgende sectie leer je hoe je veelvoorkomende problemen kunt oplossen die je met deze opdracht kunt tegenkomen.
Fouten met AWS S3 cp oplossen
Eén ding is zeker - af en toe loop je tegen problemen aan met aws s3 cp. Maar door veelvoorkomende fouten en hun oplossingen te begrijpen, bespaar je tijd en frustratie wanneer het niet volgens plan gaat.
In deze sectie laat ik de meest voorkomende problemen zien en hoe je ze oplost.
Veelvoorkomende fouten en oplossingen
Fout: "Access Denied"
Dit is waarschijnlijk de meest voorkomende fout die je zult zien:
upload failed: ./myfile.txt to s3://testbucket-aws-cp-dradecic/myfile.txt An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
Dit betekent meestal één van drie dingen:
- Je IAM-gebruiker heeft niet voldoende rechten om de operatie uit te voeren.
- De bucketpolicy beperkt de toegang.
- Je AWS-referenties zijn verlopen.
Troubleshooten doe je zo:
- Controleer je IAM-rechten en zorg dat je de benodigde permissies
s3:PutObject(voor uploads) ofs3:GetObject(voor downloads) hebt. - Verifieer dat de bucketpolicy je acties niet beperkt.
- Voer
aws configureuit om je referenties te updaten als ze zijn verlopen.
Fout: "No such file or directory"
Deze fout treedt op wanneer het lokale bestand of de map die je wilt kopiëren niet bestaat:
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
De oplossing is eenvoudig - controleer je paden goed. Paden zijn hoofdlettergevoelig, houd daar rekening mee. Zorg ook dat je je in de juiste map bevindt bij relatieve paden.
Fout: "The specified bucket does not exist"
Zie je deze fout:
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
Controleer op:
- Typfouten in je buckernaam.
- Of je de juiste AWS-regio gebruikt.
- Of de bucket daadwerkelijk bestaat (misschien is deze verwijderd).
Je kunt al je buckets weergeven met aws s3 ls om de juiste naam te bevestigen.
Fout: "Connection timed out"
Netwerkproblemen kunnen time-outs veroorzaken:
upload failed: ./largefile.zip to s3://testbucket-aws-cp-dradecic/largefile.zip An error occurred (RequestTimeout) when calling the PutObject operation: Request timeout
Los dit op door:
- Je internetverbinding te controleren.
- Kleinere bestanden te proberen of multipart-uploads in te schakelen voor grote bestanden.
- AWS Transfer Acceleration te overwegen voor betere performance.
Uploadmislukkingen afhandelen
Fouten komen vaker voor bij grote bestanden. Probeer in dat geval mislukkingen netjes af te handelen.
Je kunt bijvoorbeeld de vlag --only-show-errors gebruiken om foutdiagnose in scripts te vergemakkelijken:
aws s3 cp large-directory/ s3://testbucket-aws-cp-dradecic/ --recursive --only-show-errors
Dit onderdrukt meldingen van geslaagde overdrachten en toont alleen fouten, wat troubleshooting bij grote overdrachten veel eenvoudiger maakt.
Voor onderbroken overdrachten slaat de opdracht --recursive automatisch bestanden over die al op de bestemming bestaan met dezelfde grootte. Maar om grondiger te zijn, kun je de ingebouwde retries van de AWS CLI gebruiken voor netwerkproblemen door deze omgevingsvariabelen te zetten:
export AWS_RETRY_MODE=standard
export AWS_MAX_ATTEMPTS=5
aws s3 cp large-file.zip s3://testbucket-aws-cp-dradecic/
Hiermee vertel je de AWS CLI om mislukte operaties automatisch tot 5 keer te herhalen.
Maar voor zeer grote datasets kun je beter aws s3 sync gebruiken dan cp, omdat dit commando onderbrekingen beter aan kan:
aws s3 sync large-directory/ s3://testbucket-aws-cp-dradecic/large-directory/
De opdracht sync zet alleen bestanden over die verschillen van wat al op de bestemming staat, en is daarmee perfect om onderbroken grote overdrachten te hervatten.
Als je deze veelvoorkomende fouten begrijpt en goede foutafhandeling in je scripts inbouwt, maak je je S3-kopieeroperaties veel robuuster en betrouwbaarder.
AWS S3 cp samengevat
Kortom, de opdracht aws s3 cp is een one-stop-shop voor het kopiëren van lokale bestanden naar S3 en andersom.
Je hebt er in dit artikel alles over geleerd. Je begon bij de basis en omgevingsconfiguratie, en eindigde met het schrijven van geplande en geautomatiseerde scripts voor het kopiëren van bestanden. Je leerde ook hoe je veelvoorkomende fouten en uitdagingen bij het verplaatsen van bestanden, vooral grote, aanpakt.
Dus, of je nu developer, dataprofessional of systeembeheerder bent, ik denk dat je deze opdracht nuttig zult vinden. De beste manier om ermee vertrouwd te raken is door hem regelmatig te gebruiken. Zorg dat je de basis begrijpt en besteed daarna tijd aan het automatiseren van de saaie delen van je werk.
Wil je meer leren over AWS, volg dan deze cursussen van DataCamp:
Je kunt DataCamp zelfs gebruiken om je voor te bereiden op AWS-examens - AWS Cloud Practitioner (CLF-C02).
FAQs
Wat is de opdracht aws s3 cp, en waarvoor kun je die gebruiken?
De opdracht aws s3 cp is een hulpprogramma binnen de AWS Command Line Interface waarmee je bestanden kunt kopiëren tussen je lokale systeem en Amazon S3-opslag. Het is ontworpen om een vertrouwde commandline-ervaring te bieden, vergelijkbaar met de standaard Linux-opdracht cp, maar dan afgestemd op interactie met S3-buckets. Je kunt het gebruiken voor bidirectionele overdrachten, recursief kopiëren van complete mappenstructuren, het filteren van bestanden op patronen en zelfs het specificeren van verschillende opslagklassen voor kostenoptimalisatie. Het is vooral nuttig voor DevOps-engineers, data scientists en systeembeheerders die data in S3-buckets efficiënt moeten beheren.
Hoe stel ik de AWS CLI in om de opdracht aws s3 cp te gebruiken?
De AWS CLI instellen om de opdracht aws s3 cp te gebruiken houdt in dat je de AWS CLI op je systeem installeert, deze configureert met je AWS-inloggegevens en een S3-bucket aanmaakt. Het installatieproces verschilt licht per besturingssysteem (Windows, Linux of macOS). Na installatie voer je het commando aws configure uit en geef je je Access key ID, Secret access key, standaardregio en gewenst uitvoerformaat op. Tot slot maak je een S3-bucket aan via de AWS Management Console of direct via de AWS CLI.
Wat zijn de basis-syntaxis en veelvoorkomende use-cases voor aws s3 cp?
De basis-syntaxis voor aws s3 cp is aws s3 cp <source> <destination> [options], waarbij bron en bestemming lokale paden of S3-URI's kunnen zijn (beginnend met s3://). Veelvoorkomende use-cases zijn het uploaden van een bestand van je lokale systeem naar S3, het downloaden van een bestand van S3 naar je lokale systeem en het recursief kopiëren van hele mappen met de vlag --recursive. Je kunt de opdracht ook gebruiken om bestanden tussen verschillende S3-buckets te kopiëren, andere namen voor bestemmingsbestanden op te geven en bestanden te organiseren in geneste "map"-structuren binnen je buckets.
Hoe kan ik de vlaggen --exclude en --include gebruiken om specifieke bestanden te filteren?
De vlaggen --exclude en --include laten je bestanden op patronen filteren wanneer je aws s3 cp gebruikt, waardoor je nauwkeurige controle krijgt over wat er wordt gekopieerd. Je kunt bijvoorbeeld alle files uit een map kopiëren behalve die met specifieke extensies (zoals --exclude "*.log"), of je kunt juist specifieke bestandstypen targeten (zoals --include "*.html" --include "*.css" nadat je eerst alles hebt uitgesloten met --exclude "*"). De volgorde van deze vlaggen is belangrijk omdat de AWS CLI ze sequentieel verwerkt. Zo kun je geavanceerde filterregels opzetten voor complexe overdrachtsscenario's.
Wat is het verschil tussen aws s3 cp met --exact-timestamps en aws s3 sync?
Hoewel beide opdrachten kunnen worden gebruikt om bestanden in S3 bij te werken, hebben ze verschillende doelen en gedrag. De opdracht aws s3 cp met de vlag --exact-timestamps kopieert alleen bestanden als hun timestamps verschillen van wat al in S3 staat, wat overdrachtstijd en bandbreedte kan besparen bij updates. De opdracht aws s3 sync is echter specifiek ontworpen om mappen synchroon te houden en biedt geavanceerdere synchronisatiemogelijkheden. Als je regelmatig grote sets bestanden moet bijwerken en alleen wilt overzetten wat is gewijzigd, is aws s3 sync doorgaans de betere keuze, al kan aws s3 cp met --exact-timestamps volstaan voor eenvoudigere synchronisatie.

