Bestanden uploaden naar S3 met AWS CLI: Een uitgebreide handleiding

Wanneer je werkt met Amazon S3 (Simple Storage Service), gebruik je waarschijnlijk de S3 webconsole om bestanden te downloaden, kopiëren of uploaden naar S3-buckets. Het gebruik van de console is helemaal prima, daar is het immers voor ontworpen.

Vooral voor beheerders die meer gewend zijn aan muisklikken dan toetsenbordcommando’s, is de webconsole waarschijnlijk het gemakkelijkst. Beheerders zullen echter uiteindelijk behoefte hebben aan het uitvoeren van bulkbestandsbewerkingen met Amazon S3, zoals een onbeheerde bestandsupload. De GUI is daar niet het beste gereedschap voor.

Voor dergelijke automatiseringsvereisten met Amazon Web Services, inclusief Amazon S3, biedt de AWS CLI-tool beheerders opdrachtregelopties voor het beheren van Amazon S3-buckets en objecten.

In dit artikel leer je hoe je de AWS CLI-opdrachtregeltool kunt gebruiken om bestanden te uploaden, kopiëren, downloaden en synchroniseren met Amazon S3. Je leert ook de basisprincipes van het bieden van toegang tot je S3-bucket en het configureren van dat toegangsprofiel om te werken met de AWS CLI-tool.

Vereisten

Aangezien dit een how-to-artikel is, zullen er voorbeelden en demonstraties zijn in de volgende secties. Om succesvol mee te kunnen doen, moet je aan verschillende vereisten voldoen.

  • Een AWS-account. Als je nog geen bestaand AWS-abonnement hebt, kun je je aanmelden voor een AWS Free Tier.
  • Een AWS S3-bucket. Je kunt een bestaand bucket gebruiken als je dat liever hebt. Het wordt echter aanbevolen om in plaats daarvan een leeg bucket te maken. Raadpleeg alstublieft Het maken van een bucket.
  • A Windows 10 computer with at least Windows PowerShell 5.1. In this article, PowerShell 7.0.2 will be used.
  • De AWS CLI versie 2 tool moet geïnstalleerd zijn op je computer.
  • Lokale mappen en bestanden die je wilt uploaden of synchroniseren met Amazon S3

Je AWS S3-toegang voorbereiden

Stel dat je al aan de vereisten hebt voldaan. Je zou denken dat je al aan de slag kunt gaan met AWS CLI met je S3-bucket. Ik bedoel, zou het niet fijn zijn als het zo simpel was?

Voor degenen onder jullie die net beginnen te werken met Amazon S3 of AWS in het algemeen, heeft dit gedeelte als doel om je te helpen toegang tot S3 in te stellen en een AWS CLI-profiel te configureren.

De volledige documentatie voor het maken van een IAM-gebruiker in AWS is te vinden in deze link hieronder. Het maken van een IAM-gebruiker in je AWS-account

Het maken van een IAM-gebruiker met S3-toegangsrechten

Wanneer je AWS gebruikt via de CLI, moet je een of meer IAM-gebruikers aanmaken met voldoende toegang tot de resources waarmee je van plan bent te werken. In dit gedeelte zul je een IAM-gebruiker aanmaken met toegang tot Amazon S3.

Om een IAM-gebruiker met toegang tot Amazon S3 te maken, moet je eerst inloggen op je AWS IAM-console. Onder de groep Toegangsbeheer, klik op Gebruikers. Klik vervolgens op Gebruiker toevoegen.

IAM Users Menu

Vul de naam in van de IAM-gebruiker die je aanmaakt in het Gebruikersnaam* veld, zoals s3Admin. Bij de Toegangstype* selectie, vink Programmatische toegang aan. Klik vervolgens op de Volgende: Machtigingen knop.

Set IAM user details

Klik vervolgens op Bestaande beleidsregels rechtstreeks koppelen. Zoek vervolgens naar de beleidsnaam AmazonS3FullAccess en vink deze aan. Klik als je klaar bent op Volgende: Tags.

Assign IAM user permissions

Het toevoegen van tags is optioneel op de pagina Tags toevoegen, je kunt dit overslaan en klikken op de Volgende: Review knop.

IAM user tags

Op de Review pagina krijg je een samenvatting van het nieuwe account dat wordt aangemaakt. Klik op Gebruiker maken.

IAM user summary

Tenslotte, nadat de gebruiker is aangemaakt, moet je de Toegangssleutel-ID en de Geheime toegangssleutel kopiëren en deze opslaan voor later gebruik. Let op dat dit de enige keer is dat je deze waarden kunt zien.

IAM user key credentials

Het instellen van een AWS-profiel op je computer

Nu je de IAM-gebruiker met de juiste toegang tot Amazon S3 hebt aangemaakt, is de volgende stap het instellen van het AWS CLI-profiel op je computer.

Deze sectie gaat ervan uit dat u al de AWS CLI versie 2-tool hebt geïnstalleerd zoals vereist. Voor het maken van het profiel heeft u de volgende informatie nodig:

  • De Toegangssleutel-ID van de IAM-gebruiker.
  • De Geheime toegangssleutel die is gekoppeld aan de IAM-gebruiker.
  • De Standaardregio-naam komt overeen met de locatie van uw AWS S3-bucket. U kunt de lijst met eindpunten bekijken via deze link. In dit artikel bevindt de AWS S3-bucket zich in de regio Azië-Pacific (Sydney), en het overeenkomstige eindpunt is ap-southeast-2.
  • Het standaard-uitvoerformaat. Gebruik hiervoor JSON.

Om het profiel aan te maken, opent u PowerShell en typt u de onderstaande opdracht, gevolgd door de aanwijzingen.

aws configure

Voer de Toegangssleutel-ID, Geheime toegangssleutel, Standaardregio-naam, en standaard-uitvoernaam in. Raadpleeg de onderstaande demonstratie.

Configure an AWS CLI profile

Testen van AWS CLI-toegang

Nadat u het AWS CLI-profiel hebt geconfigureerd, kunt u bevestigen dat het profiel werkt door de onderstaande opdracht uit te voeren in PowerShell.

aws s3 ls

De bovenstaande opdracht moet de Amazon S3-buckets weergeven die u in uw account hebt. De demonstratie hieronder laat de opdracht in actie zien. Het resultaat toont aan dat de configuratie van het profiel succesvol was.

List S3 buckets

Om meer te weten te komen over de AWS CLI-commando’s specifiek voor Amazon S3, kun je de pagina AWS CLI Command Reference S3 bezoeken.

Beheer van Bestanden in S3

Met AWS CLI kunnen typische bestandsbeheeroperaties worden uitgevoerd, zoals het uploaden van bestanden naar S3, het downloaden van bestanden van S3, het verwijderen van objecten in S3 en het kopiëren van S3-objecten naar een andere S3-locatie. Het draait allemaal om het kennen van het juiste commando, de syntaxis, parameters en opties.

In de volgende secties bestaat de gebruikte omgeving uit het volgende.

  • Twee S3-buckets, namelijk atasync1 en atasync2. De onderstaande schermafbeelding toont de bestaande S3-buckets in de Amazon S3-console.
List of available S3 bucket names in the Amazon S3 console
  • Lokale directory en bestanden bevinden zich onder c:\sync.
Local Directory

Individuele Bestanden naar S3 Uploaden

Wanneer je bestanden naar S3 uploadt, kun je één bestand per keer uploaden, of door meerdere bestanden en mappen recursief te uploaden. Afhankelijk van je vereisten kun je degene kiezen die je het meest geschikt acht.

Om een bestand naar S3 te uploaden, moet je twee argumenten (bron en bestemming) verstrekken aan het aws s3 cp commando.

Bijvoorbeeld, om het bestand c:\sync\logs\log1.xml naar de hoofdmap van de atasync1 bucket te uploaden, kun je het onderstaande commando gebruiken.

aws s3 cp c:\sync\logs\log1.xml s3://atasync1/

Let op: S3-bucketnamen hebben altijd het voorvoegsel S3:// wanneer ze worden gebruikt met AWS CLI

Voer het bovenstaande commando uit in PowerShell, maar wijzig eerst de bron- en doellocaties die passen bij jouw omgeving. De uitvoer zou er vergelijkbaar uit moeten zien als de demonstratie hieronder.

Upload file to S3

De demo hierboven laat zien dat het bestand met de naam c:\sync\logs\log1.xml zonder fouten is geüpload naar de S3-bestemming s3://atasync1/.

Gebruik het onderstaande commando om de objecten in de hoofdmap van de S3-bucket op te lijsten.

aws s3 ls s3://atasync1/

Het uitvoeren van het bovenstaande commando in PowerShell zou resulteren in een vergelijkbare uitvoer, zoals getoond in de demo hieronder. Zoals je kunt zien in de onderstaande uitvoer, staat het bestand log1.xml in de hoofdmap van de S3-locatie.

List the uploaded file in S3

Meerdere bestanden en mappen recursief uploaden naar S3

Het vorige gedeelte liet zien hoe je een enkel bestand naar een S3-locatie kunt kopiëren. Wat als je meerdere bestanden vanuit een map en submappen moet uploaden? Je zou toch niet telkens hetzelfde commando willen uitvoeren voor verschillende bestandsnamen, toch?

Het aws s3 cp-commando heeft een optie om bestanden en mappen recursief te verwerken, en dit is de --recursive-optie.

Als voorbeeld, de map c:\sync bevat 166 objecten (bestanden en submappen).

The folder containing multiple files and sub-folders

Met behulp van de --recursive-optie worden alle inhoud van de map c:\sync geüpload naar S3 terwijl ook de mappenstructuur behouden blijft. Om te testen, gebruik het onderstaande voorbeeldcode, maar zorg ervoor dat je de bron- en doellocaties aanpast aan jouw omgeving.

Je zult merken dat in de onderstaande code de bron c:\sync is en de bestemming s3://atasync1/sync is. De sleutel /sync die volgt op de naam van de S3-bucket geeft aan AWS CLI aan om de bestanden in de map /sync in S3 te uploaden. Als de map /sync niet bestaat in S3, wordt deze automatisch aangemaakt.

aws s3 cp c:\sync s3://atasync1/sync --recursive

De bovenstaande code zal resulteren in de output, zoals getoond in de demonstratie hieronder.

Upload multiple files and folders to S3

Meerdere bestanden en mappen selectief uploaden naar S3

In sommige gevallen is het uploaden van ALLE soorten bestanden niet de beste optie. Bijvoorbeeld, wanneer je alleen bestanden met specifieke bestandsextensies wilt uploaden (bijv. *.ps1). Nog twee opties beschikbaar voor het cp-commando zijn --include en --exclude.

Terwijl het gebruik van het commando in de vorige sectie alle bestanden in de recursieve upload omvat, zal het commando hieronder alleen de bestanden opnemen die overeenkomen met de bestandsextensie *.ps1 en alle andere bestanden uitsluiten van de upload.

aws s3 cp c:\sync s3://atasync1/sync --recursive --exclude * --include *.ps1

De demonstratie hieronder laat zien hoe de bovenstaande code werkt wanneer deze wordt uitgevoerd.

Upload files that matched a specific file extension

Een ander voorbeeld is als je meerdere verschillende bestandsextensies wilt opnemen, dan moet je de --include-optie meerdere keren specificeren.

Het voorbeeldcommando hieronder zal alleen de *.csv– en *.png-bestanden opnemen in het kopieercommando.

aws s3 cp c:\sync s3://atasync1/sync --recursive --exclude * --include *.csv --include *.png

Het uitvoeren van de bovenstaande code in PowerShell zou je een vergelijkbaar resultaat opleveren, zoals hieronder getoond.

Upload files with multiple include options

Objecten downloaden vanuit S3

Gebaseerd op de voorbeelden die je in dit gedeelte hebt geleerd, kun je ook kopieeroperaties in omgekeerde volgorde uitvoeren. Dit betekent dat je objecten van de S3-bucketlocatie naar de lokale machine kunt downloaden.

Het kopiëren van S3 naar lokaal vereist dat je de posities van de bron en de bestemming omwisselt. De bron is de S3-locatie en de bestemming is het lokale pad, zoals hieronder weergegeven.

aws s3 cp s3://atasync1/sync c:\sync

Merk op dat dezelfde opties die worden gebruikt bij het uploaden van bestanden naar S3 ook van toepassing zijn bij het downloaden van objecten van S3 naar lokaal. Bijvoorbeeld het downloaden van alle objecten met de onderstaande opdracht met de --recursive-optie.

aws s3 cp s3://atasync1/sync c:\sync --recursive

Objecten kopiëren tussen S3-locaties

Naast het uploaden en downloaden van bestanden en mappen kun je met AWS CLI ook bestanden kopiëren of verplaatsen tussen twee S3-bucketlocaties.

Je zult merken dat de onderstaande opdracht één S3-locatie als de bron gebruikt en een andere S3-locatie als de bestemming.

aws s3 cp s3://atasync1/Log1.xml s3://atasync2/

De demonstratie hieronder toont dat het bronbestand wordt gekopieerd naar een andere S3-locatie met behulp van de bovenstaande opdracht.

Copy objects from one S3 location to another S3 location

Bestanden en mappen synchroniseren met S3

Je hebt tot nu toe geleerd hoe je bestanden kunt uploaden, downloaden en kopiëren in S3 met behulp van AWS CLI-opdrachten. In dit gedeelte leer je over nog één bestandsbewerkingopdracht die beschikbaar is in AWS CLI voor S3, namelijk de sync-opdracht. De sync-opdracht verwerkt alleen bijgewerkte, nieuwe en verwijderde bestanden.

Er zijn gevallen waarin u de inhoud van een S3-bucket up-to-date en gesynchroniseerd moet houden met een lokale map op een server. Bijvoorbeeld, u kunt een vereiste hebben om transactielogs op een server gesynchroniseerd te houden met S3 op regelmatige tijdstippen.

Met behulp van de onderstaande opdracht worden *.XML-logbestanden die zich bevinden onder de map c:\sync op de lokale server gesynchroniseerd met de S3-locatie s3://atasync1.

aws s3 sync C:\sync\ s3://atasync1/ --exclude * --include *.xml

De demonstratie hieronder toont aan dat na het uitvoeren van de bovenstaande opdracht in PowerShell, alle *.XML-bestanden zijn geüpload naar de S3-bestemming s3://atasync1/.

Synchronizing local files to S3

Synchroniseren van nieuwe en bijgewerkte bestanden met S3

In dit volgende voorbeeld wordt ervan uitgegaan dat de inhoud van het logbestand Log1.xml is gewijzigd. De sync-opdracht moet die wijziging oppikken en de wijzigingen aan het lokale bestand uploaden naar S3, zoals getoond in de demonstratie hieronder.

De opdracht die moet worden gebruikt is nog steeds hetzelfde als in het vorige voorbeeld.

Synchronizing changes to S3

Zoals u kunt zien aan de bovenstaande output, is alleen het bestand Log1.xml lokaal gewijzigd, en dus ook het enige bestand dat gesynchroniseerd is met S3.

Synchroniseren van verwijderingen met S3

Standaard verwerkt de sync-opdracht geen verwijderingen. Elk bestand dat wordt verwijderd vanaf de bronlocatie wordt niet verwijderd op de bestemming. Tenzij u natuurlijk de optie --delete gebruikt.

In dit volgende voorbeeld is het bestand met de naam Log5.xml verwijderd vanaf de bron. De opdracht om de bestanden te synchroniseren zal worden aangevuld met de optie --delete, zoals getoond in de code hieronder.

aws s3 sync C:\sync\ s3://atasync1/ --exclude * --include *.xml --delete

Wanneer u het bovenstaande commando uitvoert in PowerShell, moet het verwijderde bestand met de naam Log5.xml ook worden verwijderd op de bestemming S3-locatie. Het voorbeeldresultaat wordt hieronder weergegeven.

Synchronize file deletions to S3

Samenvatting

Amazon S3 is een uitstekende bron voor het opslaan van bestanden in de cloud. Met het gebruik van de AWS CLI-tool wordt de manier waarop u Amazon S3 gebruikt verder uitgebreid en opent het de mogelijkheid om uw processen te automatiseren.

In dit artikel hebt u geleerd hoe u de AWS CLI-tool kunt gebruiken om bestanden en mappen tussen lokale locaties en S3-buckets te uploaden, downloaden en synchroniseren. U hebt ook geleerd dat de inhoud van S3-buckets ook naar andere S3-locaties kan worden gekopieerd of verplaatst.

Er kunnen veel meer gebruiksscenario’s zijn voor het gebruik van de AWS CLI-tool om bestandsbeheer te automatiseren met Amazon S3. U kunt zelfs proberen het te combineren met PowerShell-scripting en uw eigen tools of modules te bouwen die herbruikbaar zijn. Het is aan u om die kansen te vinden en uw vaardigheden te tonen.

Verder lezen

Source:
https://adamtheautomator.com/upload-file-to-s3/