AWS Command Line Interface (CLI) je jednotný nástroj pro správu vašich služeb AWS. S jediným nástrojem ke stažení a konfiguraci můžete ovládat více služeb AWS z příkazového řádku a automatizovat je pomocí skriptů. Tento článek popisuje, jak používat AWS CLI ke správě bucketů a objektů Amazon S3, se spoustou příkladů, které můžete použít při svých každodenních aktivitách AWS.
Kromě AWS CLI důrazně doporučujeme nainstalovat aws-shell. Tento shellový program příkazového řádku poskytuje funkce pro pohodlí a produktivitu, které pomáhají novým i pokročilým uživatelům rozhraní příkazového řádku AWS. Mezi klíčové funkce patří následující:
- Fuzzy automatické dokončování pro příkazy, možnosti a zdroje AWS CLI
- Dynamická in-line dokumentace
- Provádění příkazů prostředí OS
- Exportovat provedené příkazy do textového editoru
A nakonec vám doporučujeme nainstalovat plugin Session Manager pro AWS CLI, který vám umožní používat rozhraní příkazového řádku AWS (AWS CLI) k zahájení a ukončení relací, které vás připojí k vašim instancím EC2.
Instalace AWS CLI
AWS CLI můžete nainstalovat na Windows, macOS a Linux. Kromě toho Amazon Linux AMI již obsahuje AWS CLI jako součást distribuce OS, takže jej nemusíte instalovat ručně.
Windows
U moderních distribucí Windows doporučujeme k instalaci AWS CLI použít správce balíčků Chocolatey:
# AWS CLI
choco install awscli
# Session Manager plugin
choco install awscli-session-manager
# AWS-Shell
choco install python
choco install pip
pip install aws-shell
macOS
Chcete-li nainstalovat AWS CLI na macOS, doporučujeme použít správce balíčků:
# AWS CLI
brew install awscli
# Session Manager plugin
brew install --cask session-manager-plugin
# AWS-Shell
pip install aws-shell
Linux
V závislosti na vaší distribuci Linuxu se kroky instalace liší.
CentOS, Fedora, RHEL
Pro distribuce založené na YUM (CentOS, Fedora, RHEL) můžete použít následující instalační kroky:
# AWS CLI
sudo yum update
sudo yum install wget -y
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install epel-release-latest-7.noarch.rpm
sudo yum -y install python-pip
sudo pip install awscli
# Session Manager plugin
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" \
-o "session-manager-plugin.rpm"
sudo yum install -y session-manager-plugin.rpm
# AWS-Shell
pip install aws-shell
Debian, Ubuntu
Pro distribuce založené na APT (Debian, Ubuntu) můžete použít mírně odlišné instalační kroky:
# AWS CLI
sudo apt-get install python-pip
sudo pip install awscli
# Session Manager plugin
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" \
-o "session-manager-plugin.deb"
sudo dpkg -i session-manager-plugin.deb
# AWS-Shell
pip install aws-shell
Další distribuce Linuxu
Pro ostatní distribuce Linuxu můžete použít ruční kroky instalace AWS CLI.
Rozdíl mezi AWS s3, s3api a s3control
Hlavní rozdíl mezi s3
, s3api
a s3control
příkazy jsou, že s3
příkazy jsou příkazy na vysoké úrovni postavené na nižší úrovni s3api
příkazy řízené modely JSON.
s3 | s3api | s3control |
---|---|---|
Tyto příkazy jsou speciálně navrženy tak, aby usnadnily správu souborů S3 pomocí CLI. | Tyto příkazy jsou generovány z modelů JSON, které přímo modelují rozhraní API různých služeb AWS. To umožňuje rozhraní CLI generovat příkazy, které jsou téměř jednoznačným mapováním rozhraní API služby | Tyto příkazy vám umožňují spravovat řídicí rovinu Amazon S3 |
aws s3 ls | aws s3api list-objects-v2 --bucket my-bucket | aws s3control list-jobs --account-id 123456789012 |
Pokud byste chtěli vidět, jak používat tyto příkazy k interakci s koncovými body VPC, přečtěte si náš článek Automatizace přístupu ke koncovým bodům VPC ve více regionech pomocí Terraform.
Příkazy CLI AWS S3
Obvykle používáte příkazy AWS CLI ke správě S3, když potřebujete automatizovat operace S3 pomocí skriptů nebo v automatizačním kanálu CICD. Můžete například nakonfigurovat kanál Jenkins tak, aby spouštěl příkazy AWS CLI pro jakýkoli účet AWS ve vašem prostředí.
Tato část článku pokryje nejběžnější příklady použití příkazů AWS CLI ke správě bucketů a objektů S3.
Správa segmentů S3
AWS CLI podporuje operace vytváření, vytváření seznamů a odstraňování pro správu segmentů S3.
Vytvořit segment S3
Chcete-li vytvořit segment S3 pomocí AWS CLI, musíte použít aws s3 mb
(m ake b ucket) příkaz:
aws s3 mb s3://hands-on-cloud-example-1
Poznámka :Název segmentu S3 musí vždy začínat z s3://
prefix.
Chcete-li vytvořit segment S3 pomocí AWS CLI v konkrétní oblasti AWS, musíte přidat --region
argument k předchozímu příkazu:
aws s3 mb s3://hands-on-cloud-example-2 --region us-east-2
Uveďte seznam segmentů S3
Chcete-li vypsat segmenty S3 pomocí AWS CLI, můžete použít buď aws s3 ls
nebo aws s3api list-buckets
příkazy.
aws s3 ls
aws s3api list-buckets
příkaz vytvoří JSON jako výstup:
aws s3api list-buckets
Pomocí aws s3api
příkaz vám umožňuje použít --query
parametr pro provádění dotazů JMESPath pro konkrétní členy a hodnoty ve výstupu JSON.
Vytvářejme pouze segmenty, jejichž názvy začínají hands-on-cloud-example
:
aws s3api list-buckets --query \
'Buckets[?starts_with(Name, `hands-on-cloud-example`) == `true`].Name'
Předchozí příkaz můžeme rozšířit tak, aby vypisoval pouze názvy bucketů S3:
aws s3api list-buckets --query \
'Buckets[?starts_with(Name, `hands-on-cloud-example`) == `true`].[Name]' \
--output text
Smazat segment S3
Chcete-li odstranit segment S3 pomocí AWS CLI, můžete použít buď aws s3 rb
nebo aws s3api delete-bucket
příkazy.
aws s3 rb s3://hands-on-cloud-example-1
Poznámka :můžete odstranit pouze prázdné buckety S3
Pokud váš bucket S3 obsahuje objekty, můžete použít --force
argument pro vyčištění kbelíku před odstraněním:
aws s3 rb s3://hands-on-cloud-example-2 --force
Poznámka :--force
argument nemaže objekty s verzí, což by způsobilo selhání smazání bloku.
Chcete-li odstranit sektor S3 s povoleným verzováním objektů, musíte jej nejprve vyčistit:
export bucket_name="hands-on-cloud-versioning-enabled"
# Deleting objects versions
aws s3api delete-objects \
--bucket $bucket_name \
--delete "$(aws s3api list-object-versions \
--bucket $bucket_name \
--output=json \
--query='{Objects: Versions[].{Key:Key,VersionId:VersionId}}')"
# Deleting delete markers
aws s3api delete-objects \
--bucket $bucket_name \
--delete "$(aws s3api list-object-versions \
--bucket $bucket_name \
--output=json \
--query='{Objects: Contents[].{Key:Key,VersionId:VersionId}}')"
# Deleting S3 bucket
aws s3 rb s3://$bucket_name
Správa objektů S3
V této části článku pokryjeme nejběžnější operace AWS CLI pro správu objektů S3.
Nahrát soubor do segmentu S3
Chcete-li nahrát soubor do bucketu S3 pomocí AWS CLI, musíte použít ether aws s3 cp
příkaz:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1
V případě potřeby můžete změnit název nahraného objektu S3 během operace nahrávání:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1/image.png
Kromě toho můžete při nahrávání určit třídu úložiště S3:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --storage-class ONEZONE_IA
Podporované parametry pro --storage-class
argumenty jsou:
- STANDARD – výchozí, Amazon S3 Standard
- REDUCED_REDUNDANCY – úložiště Amazon S3 se sníženou redundancí
- STANDARD_IA – Amazon S3 standardní – občasný přístup
- ONEZONE-IA – Amazon S3 One Zone – občasný přístup
- INTELLIGENT_TIERING – Amazon S3 Intelligent-Tiering
- LEDovec – ledovec Amazon S3
- DEEP_ARCHIVE – Amazon S3 Glacier Deep Archive
Pokud má být soubor zašifrován výchozím šifrováním SSE, musíte zadat --sse
argument:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --sse AES256
Pro šifrování KMS použijte následující příkaz:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --sse 'aws:kms' --sse-kms-key-id KMS_KEY_ID
Poznámka :nahradit KMS_KEY_ID
v příkazu výše s vaším vlastním ID klíče KMS.
Nahrát více souborů do bloku S3
Chcete-li nahrát více souborů do bloku S3, musíte použít buď aws s3 cp
příkaz s --recursive
argument nebo aws s3 sync
příkaz.
aws s3 cp ./directory s3://hands-on-cloud-example-1/directory --recursive
Poznámka :výše uvedený příkaz nenahraje prázdné adresáře, pokud existují v ./directory
cesta (nevytvoří objekty S3, které je budou reprezentovat).
Chcete-li nastavit třídu úložiště S3 nebo šifrování, můžete použít stejné argumenty jako ve výše uvedených příkladech.
Kromě toho můžete použít --include
a --exclude
argumenty k určení sady souborů k nahrání.
Pokud například potřebujete zkopírovat pouze .png
soubory z ./directory
, můžete použít následující příkaz:
aws s3 cp ./directory s3://hands-on-cloud-example-1/directory --recursive --exclude "*" --include "*.png"
Stejného výsledku můžete dosáhnout pomocí aws s3 sync
příkaz:
aws s3 sync ./directory s3://hands-on-cloud-example-1/directory
Poznámka :aws s3 sync
podporuje stejné argumenty pro nastavení třídy úložiště S3 a šifrování.
Výhoda použití aws s3 sync
příkaz je, že tento příkaz nahraje pouze změněné soubory z vašeho lokálního souborového systému při příštím spuštění.
Můžete použít --delete
argument pro smazání objektů z bucketu S3, pokud byly smazány ve vašem lokálním souborovém systému (kompletní synchronizace):
aws s3 sync ./directory s3://hands-on-cloud-example-1/directory --delete
Stáhnout soubor z bloku S3
Chcete-li stáhnout jeden soubor z bucketu S3 pomocí AWS CLI, musíte použít aws s3 cp
příkaz:
aws s3 cp s3://hands-on-cloud-example-1/image.png ./image.png
Stáhnout více souborů z bloku S3
Chcete-li stáhnout více souborů z bloku S3 pomocí AWS CLI, musíte použít buď aws s3 cp
nebo aws s3 sync
příkaz:
aws s3 cp s3://hands-on-cloud-example-1/directory ./directory --recursive
Poznámka :pokud segment S3 obsahuje prázdné „adresáře“ v /directory
prefix, provedení výše uvedeného příkazu vytvoří prázdné adresáře ve vašem lokálním souborovém systému.
Podobně jako u operace nahrávání můžete synchronizovat všechny objekty z bucketu S3 v rámci společné předpony do vašeho místního adresáře:
aws s3 sync s3://hands-on-cloud-example-1/directory ./directory
Poznámka :pro oba příkazy (aws s3 cp
a aws s3 sync
) můžete použít --include
a --exclude
argumenty ke stažení nebo synchronizaci pouze určité sady souborů.
Poznámka :pomocí --delete
argument s aws s3 sync
vám umožní získat kompletní zrcadlo předpony objektů S3 ve vaší místní složce.
Seznam souborů v segmentu S3
Chcete-li zobrazit soubory v bucketu S3 pomocí AWS CLI, musíte použít aws s3 ls
příkaz:
aws s3 ls s3://hands-on-cloud-example-1
Velikosti objektů čitelných pro člověka můžete získat pomocí --human-readable
argument:
aws s3 ls s3://hands-on-cloud-example-1 --human-readable
Můžete použít --recursive
argument pro výpis všech objektů S3 v segmentu S3 nebo se stejnou předponou:
# Recursive listing of the entire S3 bucket
aws s3 ls s3://hands-on-cloud-example-1 --recursive
# Recursive listing for the S3 prefix
aws s3 ls s3://hands-on-cloud-example-1/directory --recursive
Přejmenovat objekt S3
Chcete-li přejmenovat objekt S3 pomocí AWS CLI, musíte použít aws s3 mv
příkaz:
aws s3 mv s3://hands-on-cloud-example-1/image.png s3://hands-on-cloud-example-1/image2.png
Poznámka :můžete nejen přejmenovat objekty S3, ale také změnit jejich třídu úložiště a šifrování, například:
aws s3 mv s3://hands-on-cloud-example-1/image2.png s3://hands-on-cloud-example-1/image.png \
--sse AES256 --storage-class ONEZONE_IA
Přejmenovat „adresář“ S3
Chcete-li přejmenovat „adresář“ S3 pomocí AWS CLI, musíte použít aws s3 mv
příkaz:
aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-1/directory2 --recursive
Poznámka :--recursive
argument nepřesouvá prázdné „adresáře“ v rámci specifikovaného „adresáře“ S3, takže pokud očekáváte úplný přesun „adresáře“, možná budete muset znovu vytvořit prázdné „adresáře“ v cílovém adresáři (aws s3 put-object
příkaz) a odeberte je ze zdrojového adresáře (viz příklady níže).
Vytvořit prázdný „adresář“ S3
Chcete-li vytvořit prázdný „adresář“ S3 pomocí AWS CLI, musíte použít aws s3 put-object
příkaz:
aws s3api put-object --bucket hands-on-cloud-example-1 --key directory_name/
Poznámka :/
znak v názvu objektu je nutný k vytvoření prázdného adresáře. V opačném případě výše uvedený příkaz vytvoří souborový objekt s názvem directory_name
.
Kopírování/přesouvání souborů mezi segmenty S3
Chcete-li kopírovat soubory mezi segmenty S3 pomocí AWS CLI, musíte použít buď aws s3 cp
nebo aws s3 sync
příkaz. Chcete-li přesunout soubory mezi segmenty S3, musíte použít aws s3 mv
příkaz.
Kopírování souborů mezi segmenty S3 v rámci stejné oblasti AWS:
aws s3 cp s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive
Pokud se zdrojové a cílové segmenty S3 nacházejí v různých oblastech AWS, musíte použít --source-region
a --region
(zadané umístění cílového segmentu S3) argumenty:
aws s3 cp s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive \
--region us-west-2 --source-region us-east-1
Chcete-li přesunout objekty mezi segmenty S3 v rámci stejné oblasti, musíte použít aws s3 mv
příkaz:
aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive
Pokud se zdrojové a cílové segmenty S3 nacházejí v různých oblastech AWS, musíte použít --source-region
a --region
(zadané umístění cílového segmentu S3) argumenty:
aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive \
--region us-west-2 --source-region us-east-1
Poznámka :můžete použít --storage-class
a --sse
argumenty pro určení třídy úložiště a metody šifrování v cílovém segmentu S3
Poznámka :můžete použít --include
a --exclude
argumenty pro výběr pouze konkrétních souborů ke zkopírování/přesunutí ze zdrojového segmentu S3
Poznámka :--recursive
argument nekopíruje/přesouvá prázdné „adresáře“ v rámci specifikované předpony S3, takže pokud očekáváte kompletní kopírování/přesunutí „adresáře“, možná budete muset znovu vytvořit prázdné „adresáře“ v cílovém adresáři (aws s3 put-object
příkaz). Viz příklady výše.
Chcete-li synchronizovat „adresáře“ mezi segmenty S3, musíte použít aws s3 sync
příkaz, například:
aws s3 sync s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory
Poznámka :můžete použít argumenty jako --storage-class
, --sse
, --include
a --exclude
pomocí aws s3 sync
příkaz:
aws s3 sync s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory \
--region us-west-2 --source-region us-east-1 --sse AES256
Odstranění objektů S3
Chcete-li odstranit objekty S3 pomocí AWS CLI, musíte použít aws s3 rm
příkaz:
aws s3 rm s3://hands-on-cloud-example-1/image.png
Poznámka :můžete použít --recursive
, --include
a --exclude
argumenty pomocí aws s3 rm
příkaz.
Generovat předem podepsané adresy URL pro objekt S3
Chcete-li vygenerovat předem podepsanou adresu URL pro objekt S3 pomocí AWS CLI, musíte použít aws s3 presign
příkaz:
aws s3 presign s3://hands-on-cloud-example-1/image.png --expires-in 604800
Poznámka :argument –expires-in definuje dobu vypršení platnosti předem podepsané adresy URL v sekundách mezi 3600 (min) a 604800 (max) sekundami.
Nyní můžete použít vygenerovanou předem podepsanou adresu URL ke stažení objektu S3 pomocí webového prohlížeče nebo wget
příkaz, například:
wget generated_presigned_url
Nebo nahraďte objekt S3 pomocí curl
příkaz:
curl -H "Content-Type: image/png" -T image.png generated_presigned_url
Poznámka :pokud získáváte The request signature we calculated does not match the signature you provided. Check your key and signing method.
chybová zpráva, musíte znovu vygenerovat přístupový klíč AWS a tajný klíč AWS. Primárním důvodem chyby je, že přihlašovací údaje AWS obsahují určité znaky, jako je +
, %
a /
.
Shrnutí
V tomto článku jsme probrali, jak používat AWS CLI ke správě bucketů a objektů Amazon S3, se spoustou příkladů, které můžete použít při svých každodenních aktivitách AWS.