AWS Command Line Interface (CLI) adalah alat terpadu untuk mengelola layanan AWS Anda. Hanya dengan satu alat untuk mengunduh dan mengonfigurasi, Anda dapat mengontrol beberapa layanan AWS dari baris perintah dan mengotomatiskannya melalui skrip. Artikel ini membahas cara menggunakan AWS CLI untuk mengelola bucket dan objek Amazon S3 dengan banyak contoh yang dapat Anda gunakan selama aktivitas AWS Anda sehari-hari.
Selain AWS CLI, kami sangat menyarankan untuk menginstal aws-shell. Program shell baris perintah ini memberikan fitur kemudahan dan produktivitas untuk membantu pengguna baru dan lanjutan dari Antarmuka Baris Perintah AWS. Fitur utama meliputi berikut ini:
- Pelengkapan otomatis fuzzy untuk Perintah, Opsi, dan Sumber Daya AWS CLI
- Dokumentasi sebaris dinamis
- Eksekusi perintah shell OS
- Ekspor perintah yang dieksekusi ke editor teks
Dan terakhir, kami menyarankan Anda menginstal plugin Session Manager untuk AWS CLI, yang memungkinkan Anda menggunakan AWS Command Line Interface (AWS CLI) untuk memulai dan mengakhiri sesi yang menghubungkan Anda ke instans EC2 Anda.
Instalasi AWS CLI
Anda dapat menginstal AWS CLI di Windows, macOS, dan Linux. Selain itu, AMI Amazon Linux sudah berisi AWS CLI sebagai bagian dari distribusi OS, jadi Anda tidak perlu menginstalnya secara manual.
Windows
Untuk distribusi Windows modern, kami menyarankan Anda untuk menggunakan pengelola paket Chocolatey untuk menginstal AWS CLI:
# 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
Untuk menginstal AWS CLI di macOS, kami menyarankan Anda untuk menggunakan brew package manager:
# AWS CLI
brew install awscli
# Session Manager plugin
brew install --cask session-manager-plugin
# AWS-Shell
pip install aws-shell Linux
Tergantung pada distribusi Linux Anda, langkah-langkah penginstalan berbeda.
CentOS, Fedora, RHEL
Untuk distribusi berbasis YUM (CentOS, Fedora, RHEL), Anda dapat menggunakan langkah-langkah instalasi berikut:
# 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
Untuk distribusi berbasis APT (Debian, Ubuntu), Anda dapat menggunakan langkah-langkah instalasi yang sedikit berbeda:
# 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 Distribusi Linux lainnya
Untuk distribusi Linux lainnya, Anda dapat menggunakan langkah-langkah penginstalan AWS CLI manual.
Perbedaan antara AWS s3, s3api, dan s3control
Perbedaan utama antara s3 , s3api dan s3control perintahnya adalah s3 perintah adalah perintah tingkat tinggi yang dibangun di atas s3api tingkat rendah perintah yang didorong oleh model JSON.
| s3 | s3api | s3kontrol |
|---|---|---|
| Perintah ini dirancang khusus untuk memudahkan pengelolaan file S3 Anda menggunakan CLI. | Perintah ini dihasilkan dari model JSON, yang secara langsung memodelkan API dari berbagai layanan AWS. Ini memungkinkan CLI untuk menghasilkan perintah yang merupakan pemetaan dekat satu-ke-satu dari API layanan | Perintah ini memungkinkan Anda mengelola bidang kontrol Amazon S3 |
aws s3 ls | aws s3api list-objects-v2 --bucket my-bucket | aws s3control list-jobs --account-id 123456789012 |
Jika Anda ingin melihat cara menggunakan perintah ini untuk berinteraksi dengan titik akhir VPC, lihat Mengotomatiskan Akses ke Titik Akhir VPC Multi-Wilayah menggunakan artikel Terraform.
Perintah CLI AWS S3
Biasanya, Anda menggunakan perintah AWS CLI untuk mengelola S3 saat Anda perlu mengotomatiskan operasi S3 menggunakan skrip atau dalam saluran otomatisasi CICD Anda. Misalnya, Anda dapat mengonfigurasi pipeline Jenkins untuk menjalankan perintah AWS CLI untuk akun AWS mana pun di lingkungan Anda.
Bagian artikel ini akan membahas contoh paling umum penggunaan perintah AWS CLI untuk mengelola bucket dan objek S3.
Mengelola bucket S3
AWS CLI mendukung operasi buat, daftar, dan hapus untuk pengelolaan bucket S3.
Buat keranjang S3
Untuk membuat bucket S3 menggunakan AWS CLI, Anda perlu menggunakan aws s3 mb (m ake b ucket) perintah:
aws s3 mb s3://hands-on-cloud-example-1
Catatan :Nama bucket S3 harus selalu dimulai dari s3:// awalan.
Untuk membuat bucket S3 menggunakan AWS CLI di wilayah AWS tertentu, Anda perlu menambahkan --region argumen ke perintah sebelumnya:
aws s3 mb s3://hands-on-cloud-example-2 --region us-east-2 Mencantumkan bucket S3
Untuk membuat daftar bucket S3 menggunakan AWS CLI, Anda dapat menggunakan aws s3 ls atau aws s3api list-buckets perintah.
aws s3 ls
aws s3api list-buckets perintah menghasilkan JSON sebagai output:
aws s3api list-buckets
Menggunakan aws s3api perintah memungkinkan Anda untuk menggunakan --query parameter untuk melakukan kueri JMESPath untuk anggota dan nilai tertentu dalam output JSON.
Mari kita keluarkan hanya ember yang namanya dimulai dari hands-on-cloud-example :
aws s3api list-buckets --query \
'Buckets[?starts_with(Name, `hands-on-cloud-example`) == `true`].Name' Kami dapat memperluas perintah sebelumnya untuk hanya menampilkan nama bucket S3:
aws s3api list-buckets --query \
'Buckets[?starts_with(Name, `hands-on-cloud-example`) == `true`].[Name]' \
--output text Hapus keranjang S3
Untuk menghapus bucket S3 menggunakan AWS CLI, Anda dapat menggunakan aws s3 rb atau aws s3api delete-bucket perintah.
aws s3 rb s3://hands-on-cloud-example-1 Catatan :Anda hanya dapat menghapus ember S3 kosong
Jika bucket S3 Anda berisi objek, Anda dapat menggunakan --force argumen untuk membersihkan ember sebelum dihapus:
aws s3 rb s3://hands-on-cloud-example-2 --force
Catatan :--force argumen tidak menghapus objek berversi yang akan menyebabkan penghapusan bucket gagal.
Untuk menghapus bucket S3 dengan pembuatan versi objek yang diaktifkan, Anda harus membersihkannya terlebih dahulu:
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 Mengelola Objek S3
Di bagian artikel ini, kami akan membahas operasi AWS CLI yang paling umum untuk mengelola objek S3.
Unggah file ke ember S3
Untuk mengunggah file ke bucket S3 menggunakan AWS CLI, Anda perlu menggunakan ether aws s3 cp perintah:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 Jika diperlukan, Anda dapat mengubah nama objek S3 yang diunggah selama operasi pengunggahan:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1/image.png Selain itu, Anda dapat menentukan kelas penyimpanan S3 saat mengunggah:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --storage-class ONEZONE_IA
Parameter yang didukung untuk --storage-class argumennya adalah:
- STANDAR – default, Standar Amazon S3
- REDUCED_REDUNDANCY – Penyimpanan Redundansi Amazon S3 Berkurang
- STANDARD_IA – Akses Jarang Standar Amazon S3
- ONEZONE-IA – Akses Jarang Satu Zona Amazon S3
- INTELLIGENT_TIERING – Tingkat Cerdas Amazon S3
- GLACIER – Gletser Amazon S3
- DEEP_ARCHIVE – Arsip Dalam Amazon S3 Glacier
Jika file harus dienkripsi dengan enkripsi SSE default, Anda harus memberikan --sse argumen:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --sse AES256 Untuk enkripsi KMS, gunakan perintah berikut:
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
Catatan :ganti KMS_KEY_ID pada perintah di atas dengan ID kunci KMS Anda sendiri.
Unggah banyak file ke ember S3
Untuk mengunggah banyak file ke bucket S3, Anda harus menggunakan aws s3 cp perintah dengan --recursive argumen atau aws s3 sync perintah.
aws s3 cp ./directory s3://hands-on-cloud-example-1/directory --recursive
Catatan :perintah di atas tidak akan mengupload direktori kosong jika ada di dalam ./directory path (tidak akan membuat objek S3 untuk mewakilinya).
Anda dapat menggunakan argumen yang sama seperti pada contoh di atas untuk menyiapkan kelas penyimpanan atau enkripsi S3 jika diperlukan.
Selain itu, Anda dapat menggunakan --include dan --exclude argumen untuk menentukan sekumpulan file yang akan diunggah.
Misalnya, jika Anda hanya perlu menyalin .png file dari ./directory , Anda dapat menggunakan perintah berikut:
aws s3 cp ./directory s3://hands-on-cloud-example-1/directory --recursive --exclude "*" --include "*.png"
Anda dapat mencapai hasil yang sama dengan menggunakan aws s3 sync perintah:
aws s3 sync ./directory s3://hands-on-cloud-example-1/directory
Catatan :aws s3 sync perintah mendukung argumen yang sama untuk menyiapkan kelas penyimpanan dan enkripsi S3.
Manfaat menggunakan aws s3 sync perintahnya adalah perintah ini hanya akan mengunggah file yang diubah dari sistem file lokal Anda pada eksekusi berikutnya.
Anda dapat menggunakan --delete argumen untuk menghapus objek dari bucket S3 jika objek tersebut dihapus di sistem file lokal Anda (sinkronisasi lengkap):
aws s3 sync ./directory s3://hands-on-cloud-example-1/directory --delete Unduh file dari ember S3
Untuk mengunduh satu file dari bucket S3 menggunakan AWS CLI, Anda perlu menggunakan aws s3 cp perintah:
aws s3 cp s3://hands-on-cloud-example-1/image.png ./image.png Unduh banyak file dari ember S3
Untuk mengunduh banyak file dari bucket S3 menggunakan AWS CLI, Anda harus menggunakan aws s3 cp atau aws s3 sync perintah:
aws s3 cp s3://hands-on-cloud-example-1/directory ./directory --recursive
Catatan :jika ember S3 berisi "direktori" kosong di dalam /directory awalan, eksekusi perintah di atas akan membuat direktori kosong pada sistem file lokal Anda.
Sama halnya dengan operasi unggah, Anda dapat menyinkronkan semua objek dari bucket S3 dalam awalan umum ke direktori lokal Anda:
aws s3 sync s3://hands-on-cloud-example-1/directory ./directory
Catatan :untuk kedua perintah (aws s3 cp dan aws s3 sync ) Anda dapat menggunakan --include dan --exclude argumen untuk mengunduh atau menyinkronkan hanya sekumpulan file tertentu.
Catatan :menggunakan --delete argumen dengan aws s3 sync perintah memungkinkan Anda untuk mendapatkan cerminan lengkap awalan objek S3 di folder lokal Anda.
Mencantumkan file di bucket S3
Untuk membuat daftar file di bucket S3 menggunakan AWS CLI, Anda perlu menggunakan aws s3 ls perintah:
aws s3 ls s3://hands-on-cloud-example-1
Anda bisa mendapatkan ukuran objek yang dapat dibaca manusia dengan menggunakan --human-readable argumen:
aws s3 ls s3://hands-on-cloud-example-1 --human-readable
Anda dapat menggunakan --recursive argumen untuk mencantumkan semua objek S3 dalam bucket S3 atau memiliki awalan yang sama:
# 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 Ganti nama objek S3
Untuk mengganti nama objek S3 menggunakan AWS CLI, Anda perlu menggunakan aws s3 mv perintah:
aws s3 mv s3://hands-on-cloud-example-1/image.png s3://hands-on-cloud-example-1/image2.png Catatan :Anda tidak hanya dapat mengganti nama objek S3 tetapi juga mengubah kelas penyimpanan dan enkripsinya, misalnya:
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 Ganti nama "direktori" S3
Untuk mengganti nama “direktori” S3 menggunakan AWS CLI, Anda perlu menggunakan aws s3 mv perintah:
aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-1/directory2 --recursive
Catatan :--recursive argumen tidak memindahkan "direktori" kosong dalam "direktori" S3 yang ditentukan, jadi jika Anda mengharapkan pemindahan "direktori" yang lengkap, Anda mungkin perlu membuat ulang "direktori" kosong di direktori target (aws s3 put-object perintah) dan menghapusnya dari direktori sumber (lihat contoh di bawah).
Buat "direktori" S3 kosong
Untuk membuat "direktori" S3 kosong menggunakan AWS CLI, Anda perlu menggunakan aws s3 put-object perintah:
aws s3api put-object --bucket hands-on-cloud-example-1 --key directory_name/
Catatan :/ karakter dalam nama objek diperlukan untuk membuat direktori kosong. Jika tidak, perintah di atas akan membuat objek file dengan nama directory_name .
Menyalin/memindahkan file antar bucket S3
Untuk menyalin file di antara bucket S3 menggunakan AWS CLI, Anda harus menggunakan aws s3 cp atau aws s3 sync memerintah. Untuk memindahkan file di antara bucket S3, Anda perlu menggunakan aws s3 mv perintah.
Untuk menyalin file antara bucket S3 dalam Wilayah AWS yang sama:
aws s3 cp s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive
Jika bucket S3 sumber dan tujuan berada di wilayah AWS yang berbeda, Anda perlu menggunakan --source-region dan --region (lokasi bucket S3 tujuan yang ditentukan) argumen:
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
Untuk memindahkan objek di antara bucket S3 dalam wilayah yang sama, Anda perlu menggunakan aws s3 mv perintah:
aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive
Jika bucket S3 sumber dan tujuan berada di wilayah AWS yang berbeda, Anda perlu menggunakan --source-region dan --region (lokasi bucket S3 tujuan yang ditentukan) argumen:
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
Catatan :Anda dapat menggunakan --storage-class dan --sse argumen untuk menentukan kelas penyimpanan dan metode enkripsi di bucket S3 target
Catatan :Anda dapat menggunakan --include dan --exclude argumen untuk memilih hanya file tertentu yang akan disalin/dipindahkan dari ember S3 sumber
Catatan :--recursive argumen tidak menyalin/memindahkan "direktori" kosong dalam awalan S3 yang ditentukan, jadi jika Anda mengharapkan salinan/pemindahan "direktori" lengkap, Anda mungkin perlu membuat ulang "direktori" kosong di direktori target (aws s3 put-object memerintah). Lihat contoh di atas.
Untuk menyinkronkan "direktori" antara bucket S3, Anda perlu menggunakan aws s3 sync perintah, misalnya:
aws s3 sync s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory
Catatan :Anda dapat menggunakan argumen seperti --storage-class , --sse , --include dan --exclude dengan aws s3 sync perintah:
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 Menghapus objek S3
Untuk menghapus objek S3 menggunakan AWS CLI, Anda perlu menggunakan aws s3 rm perintah:
aws s3 rm s3://hands-on-cloud-example-1/image.png
Catatan :Anda dapat menggunakan --recursive , --include , dan --exclude argumen dengan aws s3 rm perintah.
Buat URL yang telah ditandatangani sebelumnya untuk objek S3
Untuk menghasilkan URL yang telah ditandatangani sebelumnya untuk objek S3 menggunakan AWS CLI, Anda perlu menggunakan aws s3 presign perintah:
aws s3 presign s3://hands-on-cloud-example-1/image.png --expires-in 604800 Catatan :argumen –expires-in mendefinisikan waktu kedaluwarsa URL yang telah ditandatangani sebelumnya dalam hitungan detik antara 3600 (menit) dan 604800 (maks) detik.
Sekarang, Anda dapat menggunakan URL yang telah ditandatangani sebelumnya untuk mengunduh objek S3 menggunakan browser web atau wget perintah, misalnya:
wget generated_presigned_url
Atau ganti objek S3 menggunakan curl perintah:
curl -H "Content-Type: image/png" -T image.png generated_presigned_url
Catatan :jika Anda mendapatkan The request signature we calculated does not match the signature you provided. Check your key and signing method. pesan kesalahan, Anda harus membuat ulang AWS Access Key dan AWS Secret Key. Alasan utama kesalahan ini adalah kredensial AWS berisi karakter tertentu seperti + , % , dan / .
Ringkasan
Dalam artikel ini, kami telah membahas cara menggunakan AWS CLI untuk mengelola bucket dan objek Amazon S3 dengan banyak contoh yang dapat Anda gunakan selama aktivitas AWS Anda sehari-hari.