Installasjon
Vennligst se 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
OBS: Dersom du har høyere versjon enn 2.23, er det nødvendig å eksportere følgende parametere i shellet:
export AWS_REQUEST_CHECKSUM_CALCULATION=when_required export AWS_RESPONSE_CHECKSUM_VALIDATION=when_required
Det kan gjerne legges inn i ~/.bashrc så man slipper å oppgi hver gang.
Dette var default verdier før, men det ble endret til å alltid kreve sjekksum-validering såfremt man ikke justerer verdien tilbake selv.
Du vil få feilmeldinger på denne formen dersom verdien er feil:
"An error occurred (InvalidArgument) when calling the PutObject operation: Unsupported header 'x-amz-sdk-checksum-algorithm' received for this API call"
Et annet alternativ er å rulle tilbake til en eldre versjon enn 2.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 .
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.
aws-cli støtter ikke bruk av wildcards (*) i selve stien, men det kan brukes med --exclude og --include opsjoner!
Så om man f.eks vil kopiere ned alle objekter som har spesifikke prefiks og/eller suffix, kan man omgå problemet slik:
aws s3 cp s3://data/ . --recursive --exclude "*" \ --include "*søkeord*søkeord2*"
Merk at rekkefølgen er viktig her; man må først ekskludere alle filer, for deretter velge ut hvilke filer man skal inkludere igjen.
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: