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.