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 10. sep. 2024 10:04