GNU/Linux >> Linux の 問題 >  >> Linux

AWSCLIを使用してAmazonS3を管理する方法

AWSコマンドラインインターフェイス(CLI)は、AWSサービスを管理するための統合ツールです。ダウンロードして設定するツールが1つだけで、コマンドラインから複数のAWSサービスを制御し、スクリプトを使用してそれらを自動化できます。この記事では、AWSCLIを使用してAmazonS3バケットとオブジェクトを管理する方法と、日常のAWSアクティビティで使用できる多くの例について説明します。

AWS CLIに加えて、aws-shellをインストールすることを強くお勧めします。このコマンドラインシェルプログラムは、AWSコマンドラインインターフェイスの新規ユーザーと上級ユーザーの両方を支援する便利な機能と生産性機能を提供します。主な機能は次のとおりです。

  • AWS CLIコマンド、オプション、およびリソースのあいまいなオートコンプリート
  • 動的インラインドキュメント
  • OSシェルコマンドの実行
  • 実行されたコマンドをテキストエディタにエクスポートする

最後に、AWSCLI用のSessionManagerプラグインをインストールすることをお勧めします。これにより、AWSコマンドラインインターフェイス(AWS CLI)を使用して、EC2インスタンスに接続するセッションを開始および終了できます。

AWSCLIのインストール

AWS CLIは、Windows、macOS、およびLinuxにインストールできます。それに加えて、Amazon LinuxAMIにはすでにOSディストリビューションの一部としてAWSCLIが含まれているため、手動でインストールする必要はありません。

ウィンドウズ

最新のWindowsディストリビューションの場合、Chocolateyパッケージマネージャーを使用してAWSCLIをインストールすることをお勧めします。

# 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

MacOSにAWSCLIをインストールするには、brewパッケージマネージャーを使用することをお勧めします:

# AWS CLI
brew install awscli

# Session Manager plugin
brew install --cask session-manager-plugin

# AWS-Shell
pip install aws-shell

Linux

Linuxディストリビューションによって、インストール手順は異なります。

CentOS、Fedora、RHEL

YUMベースのディストリビューション(CentOS、Fedora、RHEL)の場合、次のインストール手順を使用できます。

# 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

APTベースのディストリビューション(Debian、Ubuntu)の場合、わずかに異なるインストール手順を使用できます:

# 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
その他のLinuxディストリビューション

他のLinuxディストリビューションの場合は、手動のAWSCLIインストール手順を使用できます。

AWS s3、s3api、およびs3controlの違い

s3の主な違い 、s3api およびs3control コマンドは、s3 コマンドは、低レベルのs3apiの上に構築された高レベルのコマンドです。 JSONモデルによって駆動されるコマンド。

s3 s3api s3control
これらのコマンドは、CLIを使用したS3ファイルの管理を容易にするために特別に設計されています。 これらのコマンドは、さまざまなAWSサービスのAPIを直接モデル化するJSONモデルから生成されます。これにより、CLIは、サービスのAPIのほぼ1対1のマッピングであるコマンドを生成できます これらのコマンドを使用すると、AmazonS3コントロールプレーンを管理できます
aws s3 ls aws s3api list-objects-v2 --bucket my-bucket aws s3control list-jobs --account-id 123456789012

これらのコマンドを使用してVPCエンドポイントを操作する方法については、Terraformを使用したマルチリージョンVPCエンドポイントへのアクセスの自動化に関する記事をご覧ください。

AWSS3CLIコマンド

通常、スクリプトまたはCICD自動化パイプラインを使用してS3操作を自動化する必要がある場合は、AWSCLIコマンドを使用してS3を管理します。たとえば、環境内の任意のAWSアカウントに対してAWSCLIコマンドを実行するようにJenkinsパイプラインを設定できます。

記事のこのセクションでは、AWSCLIコマンドを使用してS3バケットとオブジェクトを管理する最も一般的な例について説明します。

S3バケットの管理

AWS CLIは、S3バケット管理の作成、一覧表示、削除の操作をサポートしています。

S3バケットを作成

AWS CLIを使用してS3バケットを作成するには、aws s3 mbを使用する必要があります ( m ake b ucket)コマンド:

aws s3 mb s3://hands-on-cloud-example-1

:S3バケット名は常にs3://から開始する必要があります プレフィックス。

特定のAWSリージョンでAWSCLIを使用してS3バケットを作成するには、--regionを追加する必要があります 前のコマンドの引数:

aws s3 mb s3://hands-on-cloud-example-2 --region us-east-2
S3バケットを一覧表示

AWS CLIを使用してS3バケットを一覧表示するには、aws s3 lsのいずれかを使用できます またはaws s3api list-buckets コマンド。

aws s3 ls

aws s3api list-buckets コマンドは出力としてJSONを生成します:

aws s3api list-buckets

aws s3apiの使用 コマンドを使用すると、--queryを使用できます JSON出力の特定のメンバーと値に対してJMESPathクエリを実行するためのパラメータ。

名前がhands-on-cloud-exampleで始まるバケットのみを出力してみましょう :

aws s3api list-buckets --query \
  'Buckets[?starts_with(Name, `hands-on-cloud-example`) == `true`].Name'

前のコマンドを拡張して、S3バケット名のみを出力できます:

aws s3api list-buckets --query \
  'Buckets[?starts_with(Name, `hands-on-cloud-example`) == `true`].[Name]' \
  --output text

S3バケットを削除

AWS CLIを使用してS3バケットを削除するには、aws s3 rbのいずれかを使用できます またはaws s3api delete-bucket コマンド。

aws s3 rb s3://hands-on-cloud-example-1

:空のS3バケットのみを削除できます

S3バケットにオブジェクトが含まれている場合は、--forceを使用できます 削除する前にバケットをクリーンアップする引数:

aws s3 rb s3://hands-on-cloud-example-2 --force

--force 引数は、バケットの削除が失敗する原因となるバージョン管理されたオブジェクトを削除していません。

オブジェクトのバージョン管理が有効になっているS3バケットを削除するには、最初にそれをクリーンアップする必要があります:

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

S3オブジェクトの管理

記事のこのセクションでは、S3オブジェクトを管理するための最も一般的なAWSCLI操作について説明します。

S3バケットにファイルをアップロード

AWS CLIを使用してファイルをS3バケットにアップロードするには、ether aws s3 cpを使用する必要があります コマンド:

aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1

必要に応じて、アップロード操作中にアップロードされたS3オブジェクト名を変更できます:

aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1/image.png

それに加えて、アップロード中にS3ストレージクラスを指定できます:

aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --storage-class ONEZONE_IA

--storage-classでサポートされているパラメータ 引数は次のとおりです:

  • 標準–デフォルト、AmazonS3標準
  • REDUCED_REDUNDANCY –AmazonS3の冗長性ストレージの削減
  • STANDARD_IA –AmazonS3標準-アクセス頻度が低い
  • ONEZONE-IA – AmazonS3Oneゾーン-アクセス頻度が低い
  • INTELLIGENT_TIERING –AmazonS3インテリジェントティアリング
  • GLACIER –AmazonS3氷河
  • DEEP_ARCHIVE –AmazonS3グレイシャーディープアーカイブ

ファイルをデフォルトのSSE暗号化で暗号化する必要がある場合は、--sseを指定する必要があります 引数:

aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --sse AES256

KMS暗号化の場合は、次のコマンドを使用します。

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

KMS_KEY_IDを置き換えます 上記のコマンドで、独自のKMSキーIDを使用します。

S3バケットに複数のファイルをアップロードする

複数のファイルをS3バケットにアップロードするには、aws s3 cpのいずれかを使用する必要があります --recursiveを使用したコマンド 引数またはaws s3 sync コマンド。

aws s3 cp ./directory s3://hands-on-cloud-example-1/directory --recursive

:上記のコマンドは、空のディレクトリが./directory内に存在する場合、それらをアップロードしません。 パス(それらを表すS3オブジェクトは作成されません)。

上記の例と同じ引数を使用して、必要に応じてS3ストレージクラスまたは暗号化を設定できます。

それに加えて、--includeを使用できます および--exclude アップロードするファイルのセットを指定するための引数。

たとえば、.pngのみをコピーする必要がある場合 ./directoryのファイル 、次のコマンドを使用できます:

aws s3 cp ./directory s3://hands-on-cloud-example-1/directory --recursive --exclude "*" --include "*.png"

aws s3 syncを使用しても同じ結果を得ることができます コマンド:

aws s3 sync ./directory s3://hands-on-cloud-example-1/directory

aws s3 sync コマンドは、S3ストレージクラスと暗号化を設定するための同じ引数をサポートします。

aws s3 syncを使用する利点 コマンドは、このコマンドが次回の実行時にローカルファイルシステムから変更されたファイルのみをアップロードすることです。

--deleteを使用できます ローカルファイルシステムでオブジェクトが削除された場合にS3バケットからオブジェクトを削除する引数(完全同期):

aws s3 sync ./directory s3://hands-on-cloud-example-1/directory --delete

S3バケットからファイルをダウンロード

AWS CLIを使用してS3バケットから単一のファイルをダウンロードするには、aws s3 cpを使用する必要があります コマンド:

aws s3 cp s3://hands-on-cloud-example-1/image.png ./image.png

S3バケットから複数のファイルをダウンロード

AWS CLIを使用してS3バケットから複数のファイルをダウンロードするには、aws s3 cpのいずれかを使用する必要があります またはaws s3 sync コマンド:

aws s3 cp s3://hands-on-cloud-example-1/directory ./directory --recursive

:S3バケットの/directory内に空の「ディレクトリ」が含まれている場合 プレフィックスを付けると、上記のコマンドを実行すると、ローカルファイルシステムに空のディレクトリが作成されます。

アップロード操作と同様に、共通プレフィックス内のS3バケットからローカルディレクトリにすべてのオブジェクトを同期できます:

aws s3 sync s3://hands-on-cloud-example-1/directory ./directory

:両方のコマンドの場合(aws s3 cp およびaws s3 sync--includeを使用できます および--exclude 特定のファイルセットのみをダウンロードまたは同期するための引数。

--deleteを使用する aws s3 syncを使用した引数 コマンドを使用すると、ローカルフォルダ内のS3オブジェクトプレフィックスの完全なミラーを取得できます。

S3バケット内のファイルを一覧表示する

AWS CLIを使用してS3バケット内のファイルを一覧表示するには、aws s3 lsを使用する必要があります コマンド:

aws s3 ls s3://hands-on-cloud-example-1

--human-readableを使用すると、人間が読める形式のオブジェクトのサイズを取得できます。 引数:

aws s3 ls s3://hands-on-cloud-example-1 --human-readable

--recursiveを使用できます S3バケット内または同じプレフィックスを持つすべてのS3オブジェクトを一覧表示する引数:

# 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

S3オブジェクトの名前を変更

AWS CLIを使用してS3オブジェクトの名前を変更するには、aws s3 mvを使用する必要があります コマンド:

aws s3 mv s3://hands-on-cloud-example-1/image.png s3://hands-on-cloud-example-1/image2.png

:S3オブジェクトの名前を変更できるだけでなく、ストレージクラスと暗号化を変更することもできます(例:

)。
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

S3の「ディレクトリ」の名前を変更します

AWS CLIを使用してS3の「ディレクトリ」の名前を変更するには、aws s3 mvを使用する必要があります コマンド:

aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-1/directory2 --recursive

--recursive 引数は指定されたS3「ディレクトリ」内の空の「ディレクトリ」を移動しないため、完全な「ディレクトリ」の移動を期待している場合は、ターゲットディレクトリに空の「ディレクトリ」を再作成する必要があります(aws s3 put-object コマンド)、ソースディレクトリからそれらを削除します(以下の例を参照)。

空のS3「ディレクトリ」を作成します

AWS CLIを使用して空のS3「ディレクトリ」を作成するには、aws s3 put-objectを使用する必要があります コマンド:

aws s3api put-object --bucket hands-on-cloud-example-1 --key directory_name/

/ 空のディレクトリを作成するには、オブジェクト名の文字が必要です。それ以外の場合、上記のコマンドはdirectory_nameという名前のファイルオブジェクトを作成します 。

S3バケット間でファイルをコピー/移動

AWS CLIを使用してS3バケット間でファイルをコピーするには、aws s3 cpのいずれかを使用する必要があります またはaws s3 sync 指図。 S3バケット間でファイルを移動するには、aws s3 mvを使用する必要があります コマンド。

同じAWSリージョン内のS3バケット間でファイルをコピーするには:

aws s3 cp s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive

ソースと宛先のS3バケットが異なるAWSリージョンにある場合は、--source-regionを使用する必要があります および--region (指定された宛先S3バケットの場所)引数:

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

同じリージョン内のS3バケット間でオブジェクトを移動するには、aws s3 mvを使用する必要があります コマンド:

aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive

ソースと宛先のS3バケットが異なるAWSリージョンにある場合は、--source-regionを使用する必要があります および--region (指定された宛先S3バケットの場所)引数:

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

--storage-classを使用できます および--sse ターゲットS3バケットのストレージクラスと暗号化メソッドを指定する引数

--includeを使用できます および--exclude ソースS3バケットからコピー/移動する特定のファイルのみを選択するための引数

--recursive 引数は指定されたS3プレフィックス内の空の「ディレクトリ」をコピー/移動しないため、完全な「ディレクトリ」のコピー/移動が必要な場合は、ターゲットディレクトリに空の「ディレクトリ」を再作成する必要があります(aws s3 put-object 指図)。上記の例を参照してください。

S3バケット間で「ディレクトリ」を同期するには、aws s3 syncを使用する必要があります コマンド、例:

aws s3 sync s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory

--storage-classのような引数を使用できます 、--sse--include および--exclude aws s3 syncを使用 コマンド:

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

S3オブジェクトの削除

AWS CLIを使用してS3オブジェクトを削除するには、aws s3 rmを使用する必要があります コマンド:

aws s3 rm s3://hands-on-cloud-example-1/image.png

--recursiveを使用できます 、--include 、および--exclude aws s3 rmを使用した引数 コマンド。

S3オブジェクトの事前署名されたURLを生成します

AWS CLIを使用してS3オブジェクトの事前署名されたURLを生成するには、aws s3 presignを使用する必要があります コマンド:

aws s3 presign s3://hands-on-cloud-example-1/image.png --expires-in 604800

:–expires-in引数は、3600(分)から604800(最大)秒の間の秒単位で事前署名されたURLの有効期限を定義します。

これで、生成された事前署名されたURLを使用して、Webブラウザーまたはwgetを使用してS3オブジェクトをダウンロードできます。 コマンド、例:

wget generated_presigned_url

または、curlを使用してS3オブジェクトを置き換えます コマンド:

curl -H "Content-Type: image/png" -T image.png generated_presigned_url

The request signature we calculated does not match the signature you provided. Check your key and signing method. エラーメッセージが表示されたら、AWSアクセスキーとAWSシークレットキーを再生成する必要があります。エラーの主な理由は、AWSクレデンシャルに+などの特定の文字が含まれていることです 、% 、および/

概要

この記事では、AWSCLIを使用してAmazonS3バケットとオブジェクトを管理する方法について説明し、日々のAWSアクティビティで使用できる多くの例を紹介しました。


Linux
  1. LinuxでFlatpakをインストールして使用する方法

  2. AmazonLinuxにMySQL5.7をインストールする方法

  3. Ubuntu20.04LTSにAWSCLIをインストールする方法

  1. Ubuntu 20.04 FocalFossaLinuxにAWSCLIをインストールする方法

  2. KubernetesにHelmをインストールして使用する方法

  3. awscli のインストール方法

  1. Linux Screenをインストールして使用する方法は?

  2. Amazonマシンイメージ(AMI)を作成してAWSで使用する方法

  3. Terraformとは何ですか?AWSEC2にインストールして使用する方法