English version of this page

AWS CLI

Amazons egne kommandolinjeverktøy er en enkel og effektiv måte å interragere med dine bøtter på direkte i en terminal.

Installasjon

Vennligst se Amazon sin dokumentasjon for instruksjoner om hvordan du installerer AWS CLI for Linux, MacOS eller Windows.

Merk at for Linux så finnes det pakker for AWS-CLI (aws i Fedora, eller awscli for ubuntu), noen ganger forhåndsinstallerte, men disse er som oftest med versjon 1. Om man vil ha de nyeste funksjonene og fiksene som kommer med versjon 2, må man laste ned og manuelt installere pakken direkte fra AWS i henhold til guiden i lenken over.

Du kan sjekke hvilken versjon du har installert (Unix), slik:

 $ aws --version aws-cli/2.13.23 

 

Bruk av verktøyet

aws-verktøyet har et bredt utvalg opsjoner, men for kommunikasjon med s3 vil du kun trenge aws s3 eller aws s3api. Manualer kan sjekkes slik:

aws s3 help
aws s3api help 

I korte trekk brukes aws s3 for å utføre enkle høy-nivå oppgaver og behandle bøtten som om den er en mappe, mens aws s3api tillater bruk av hvilken som helst AWS REST API-endepunkt for spesifikke, lav-nivå forespørsler.
Du kan lese mer om forskjellene her.

Denne veiledningen vil dekke noen vanlige brukstilfeller for begge alternativene.

 

Konfigurasjon

Først må du sette opp dine nøkler i ~/.aws, som beskrevet i oppstartsguiden vår:

Dette bør være tilstrekkelig til å teste forbindelsen din ved å liste opp tilgjengelige bøtter med:

aws s3 ls --endpoint https://s3-oslo.educloud.no

Eventuelt med --profile opsjon hvis du har flere nøkkelpar.
Uten å oppgi --endpoint, vil det per default feilaktig benyttes et AWS-endepunkt. Men standarden kan endres slik at du slipper å oppgi dette hver gang.

Om du har AWS-CLI versjon 2 kan du kan du definere vårt endepunkt som standard ved å legge til dette i ~/.aws/config:

[profile default]
region = oslo
endpoint_url = https://s3-oslo.educloud.no

Du kan eventuelt også legge inn ulike konfigurasjoner for ulike profiler lagt til i ~/.aws/credentials, dersom du benytter buckets fra flere tjenester/endepunkt.

Om du har AWS-CLI versjon 1, og ikke har mulighet til å oppgradere til versjon 2, så er det dessverre en kjent bug som gjør at endepunkt definert i config-filen ikke plukkes opp. I så tilfelle kan dette omgås ved å opprette en alias for aws-kommandoen i shell-configen:

alias aws='aws --endpoint https://s3-oslo.educloud.no'

Dette vil fungere for både aws s3 og aws s3api.

 

Høy-nivå filinteraksjon

Ved å bruke "aws s3-"alternativet kan filer håndteres med vanlige Unix-skallkommandoer: ls, rm, cp, og mv.

Stien til objektet/ene må starte med s3://

 

Liste opp alle dine bøtter

aws s3 ls [--profile <profilnavn>]

Ex.
$ aws s3 ls --profile markusor
2023-03-15 11:40:04 1003-green-markusor-test
2023-02-20 10:35:55 1003-markusor-benchmark

Merk at IAM-nøkler ikke har tillatelse til å forsøke å liste ut alle eierens buckets, selv om alle så er oppgitt i policy-dokumentet. I stedet må man eksplisitt forsøke å liste ut innholdet fra en utvalgt bøtte, se under.

 

Liste innholdet i en bøtte

aws s3 ls s3://<bøttenavn>

Ex.
$ aws s3 ls s3://1003-green-markusor-test

                           PRE testmappe/
2023-04-20 15:04:07     578885 foo.jpeg
2023-10-03 20:34:28       4897 scanner.sh

(PRE tilsvarer "mapper")

Videre kan du liste innholdet i en mappe slik:

aws s3 ls s3://<bøttenavn>/<mappenavn>/

Ex.
$ aws s3 ls s3://1003-green-markusor-test/testmappe/
2023-10-03 20:34:28     301111 test.log
2023-10-03 20:34:28       1675 foo.md

Merk: Stien må slutte med "/", eller listes kun mappen i seg selv.

 

Flytte/kopiere filer til eller fra bucket

# Fra lokal disk til bøtte
aws s3 mv ./local_file.txt   s3://<bucket_name>/

# Fra bøtte til lokalt
aws s3 mv s3://<bucket_name>/remote_file.txt   ./

Tilsvarende for kopiering med aws s3 cp.
I praksis vil dette laste opp eller ned objekter fra bøtten.

 

Slette filer

aws s3 rm s3://<bøttenavn/remote_file.txt

Du kan eventuelt legge til opsjonen --recursive for å fjerne en mappe med alt innhold.

 

Lav-nivå interaksjon

Tilgang til alle AWS S3 API-oppslag kan nås via aws s3api. For eksempel kan du bruke det til å hente metadata om en bestemt fil:

aws s3api head-object --bucket <bucket_name> --key <filsti> 

Ex.
$ aws s3api head-object --bucket 1003-green-markusor-test --key scanner.sh
{
    "AcceptRanges": "bytes",
    "LastModified": "Thu, 26 Oct 2023 11:19:33 GMT",
    "ContentLength": 4899,
    "ETag": "\"ce794b44508bce5be18b172cc8ee5203\"",
    "CacheControl": "private, max-age=0, no-cache, no-store",
    "ContentType": "text/x-shellscript",
    "Metadata": {}
}

 

Avanserte spørringer

s3api har en query-opsjon som tilbyr avanserte søk, og kan formattere outputtet i et brukervennlig format.
Eksempelet under henter ut navn og størrelse på alle filer i en bøtte:

aws s3api list-objects --bucket <bøttenavn> --output json \
                       --query "[Contents][].{Key:Key,Size:Size}"

Ex. $ aws s3api list-objects --bucket 1003-green-markusor-test --output json \
     --query "[Contents][].{Key:Key,Size:Size}" 
[
    {
        "Key": "scanner.sh",
        "Size": 4899
    },
    {
        "Key": "test.md",
        "Size": 6
    }
]

Argumentet til query følger JMESpath syntaks, med ypperlig guide på deres egne sider:

 

 

Emneord: S3, storage, lagring Av Markus Sørensen
Publisert 9. feb. 2024 13:12 - Sist endret 17. apr. 2024 11:25