Terug naar lijst

Introductie

Een Amazon S3 bucket is een flexibele en simpele Cloud opslag. Je kunt daar werkelijk alle soorten en maten van objecten in kwijt. Te denken aan foto’s, internet applicaties, back-ups, data archieven, enz., enz. De maandelijkse uptime van de dienst is gezet op minder dan 99,9% wat de dienst bijzonder geschikt maakt voor web content zoals foto’s. In deze blog laat ik je zien hoe ik de content van een Windows server verplaats naar een S3 Bucket.

Gebruiker aanmaken

Voordat we beginnen moet er een gebruiker worden aangemaakt, meld je aan in de AWS console om een acces key aan te maken door middel van Identity and Authentication Management (AWS IAM). Als je bent ingelogd navigeer je naar Services > IAM > Users en klik op Add user.

Vul een gebruikersnaam in, in mijn voorbeeld is dit DemoUserS3. Vink de Access type Programmatic acces aan en klik op Next: Permissions. Klik op tab Attach existing policies directly, typ “S3“ in het zoekveld, en selecteer AmazonS3FullAccess. Klik op Next: Tags, vul hier, indien gewenst, tags in en klik op Next: Review voor een laatste controle van de instellingen die in de vorige stappen zijn meegegeven. Als alles in orde is klik je op Create user.

Let er op dat je altijd bij deze stap altijd de key’s opslaat op een veilige plek, ze worden namelijk maar één keer uitgegeven.

Daarnaast heeft de gebruiker nu een standaard policy (volledig toegang tot de S3 omgeving) je kunt zelf ook policies maken die bijvoorbeeld toegang kunnen geven tot één bucket in plaats van alle buckets. In deze blog zal ik daar verder niet over uitweiden.

Installeren AWS tools voor PowerShell

Open PowerShell als Administrator. Typ het volgende in de PowerShell Console: Install-Module -Name AWSPowerShell.NetCore

Waarschijnlijk wordt er aangegeven dat de repository niet vertrouwd is, de vraag is of je het vertrouwt. Vul A in als antwoord en druk op Enter. Houd PowerShell open.

AWS profiel instellen in PowerShell

Nu gaan we het standaard profiel instellen om later connectie te kunnen maken met de S3 Bucket.
Je typt het volgende in je PowerShell Console: set-AWSCredential -AccessKey <Access key ID> -SecretKey <Secret access key> -StoreAs default

Nu gaan we nog de standaard regio instellen in het profiel. We doen dit door de volgende PowerShell commando uit te voeren: Initialize-AWSDefaultConfiguration -ProfileName default -Region <regio code>

Kopiëren bestanden

Even voor de beeldvorming, ik heb al een S3 bucket (demos3blog) aangemaakt. Dit heb ik gedaan door New-S3Bucket -BucketName <bucket naam> -<regio code> in PowerShell uit te voeren.

Ik zal hieronder 2 voorbeelden beschrijven om objecten te kopiëren. Ik begin met 5 jpg en 1 tekst bestand in een folder (C:\DemoLocalStorage).

Een enkele file kopiëren naar S3

In PowerShell voer je de volgende regel uit: Write-S3Object -BucketName demos3blog -Key “Pictures/picture1.jpg” -File C:\DemoLocalStorage\picture1.jpg -CannedACLName public-read

  • BucketName = Naam van de S3 Bucket.
  • Key = Locatie waar het object moet komen, in dit geval in folder Pictures. Als de folder niet bestaat wordt deze hiermee ook aangemaakt.
  •  CannedACLName = De rechten die je het object geeft. In dit geval Public read zodat de jpg straks ook publiek beschikbaar is.

Als je de code hebt uitgevoerd kun je in de bucket het resultaat zien.

Meerder files, gefilterd op .jpg, kopiëren naar S3

Als je een complete folder met jpg-tjes wilt kopiëren heb je net iets meer nodig. Ik heb hieronder een scriptje staan die niet al te ingewikkeld is, je kunt deze naar wens verder uitbouwen of wijzigen. Het gaat mij er vooral om dat je op deze manier kunt filteren in een specifieke map.

$results = Get-ChildItem C:\DemoLocalStorage -Recurse -Include “*.jpg”
foreach ($path in $results) {
Write-Host $path
$filename = [System.IO.Path]::GetFileName($path)
Write-S3Object -BucketName demos3blog -File $path -Key Pictures/$filename -CannedACLName public-read
}

Na het uitvoeren van bovenstaande script staan alle .jpg bestanden gekopieerd in de bucket. Alle andere extensies worden met rust gelaten. Daarnaast is het ook zo dat als je de script nog een keer draait, dan worden de bestanden geüpdatet naar een nieuwe versie. Er worden geen bestanden hernoemd.

Als je klaar bent met je werk en je gaat geen gebruik meer maken van AWS PowerShell Toolkit, is het verstandig om je profiel te verwijderen. Dit doe je met dit script: Remove-AWSCredentialProfile -ProfileName default

Al met al is het niet zo ingewikkeld om al je gewenste objecten in een Cloud opslag te krijgen. Ik hoop je met deze blog een duidelijk beeld gegeven te hebben hoe je dit aanpakt.