GNU/Linux >> Belajar Linux >  >> Linux

Cara menggunakan AWS CLI untuk mengelola Amazon S3

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.


Linux
  1. Cara Menginstal Dan Menggunakan Flatpak Di Linux

  2. Cara Menginstal MySQL 5.7 di Amazon Linux

  3. Cara Menginstal awscli

  1. Cara Menginstal AWS CLI di Ubuntu 20.04 Focal Fossa Linux

  2. Cara Memasang dan Menggunakan Helm di Kubernetes

  3. Cara Menginstal AWS CLI di Ubuntu 20.04 LTS

  1. Bagaimana Cara Menginstal dan Menggunakan Layar Linux?

  2. Cara Membuat Amazon Machine Image (AMI) dan menggunakannya di AWS

  3. Apa itu Terraform dan bagaimana cara menginstal dan menggunakannya di AWS EC2