AWS CLI を使用した Amazon S3 の開始方法 - Amazon Simple Storage Service

AWS CLI を使用した Amazon S3 の開始方法

AWS Command Line Interface (AWS CLI) を使用して、汎用バケットとオブジェクトを操作することで、Amazon S3 の使用を開始できます。バケット とは、オブジェクトのコンテナのことです。オブジェクト とは、ファイルと、そのファイルを記述している任意のメタデータのことです。

Amazon S3 にオブジェクトを保存するには、バケットを作成し、そのバケットにオブジェクトをアップロードします。オブジェクトがバケットの中にあるときは、オブジェクトを開き、ダウンロードして、移動させます。オブジェクトまたはバケットが不要になったら、リソースをクリーンアップします。

Amazon S3 では、お支払いは実際に使用した分のみです。Amazon S3 の機能と料金の詳細については、「Amazon S3」を参照してください。Amazon S3 の新規のお客様は、Amazon S3 を無料で使い始めることができます。詳細については、AWS 無料利用枠 を参照してください。

注記

Amazon S3 Express One Zone ストレージクラスをディレクトリバケットで使用する方法の詳細については、「チュートリアル: S3 Express One Zone の使用を開始する」と「ディレクトリバケットの使用」を参照してください。

設定

Amazon S3 で AWS CLI の使用を開始する前に、以下が行われていることを確認します。

AWS CLI が適正に設定されていることを確認するには、次のコマンドを実行します。

aws sts get-caller-identity

詳細については、「AWS CLI コマンドリファレンス」の「get-caller-identity」を参照してください。

このコマンドは、AWS CLI が正しくインストールおよび設定されている場合、使用可能な Amazon S3 コマンドのリストを表示します。

ステップ 1: 最初の Amazon S3 バケットを作成する

AWS CLI をセットアップしたら、Amazon S3 にバケットを作成できます。Amazon S3 のオブジェクトはすべてバケットに保管されます。Amazon S3 にデータを保管する前に、バケットを作成する必要があります。

注記

バケットの作成は課金対象にはなりません。バケット内にオブジェクトを保存した場合、およびバケット宛てまたはバケットからオブジェクトを転送した場合にのみ課金されます。このガイドの例に従って操作して発生する使用料はごくわずかです (1 USD 未満)。ストレージ料金の詳細については、「Amazon S3 の料金」を参照してください。

バケットを作成するには
  1. s3api create-bucket コマンドを使用してバケットを作成します。amzn-s3-demo-bucket を一意のバケット名に、us-east-1 を目的のリージョンに置き換えます。

    aws s3api create-bucket --bucket amzn-s3-demo-bucket --region us-east-1

    us-east-1 以外のリージョンでは、場所の制約を指定する必要があります。

    aws s3api create-bucket --bucket amzn-s3-demo-bucket --region us-west-2 --create-bucket-configuration LocationConstraint=us-west-2
    注記
    • 一旦バケットを作成したら、そのリージョンを変更することはできません。

    • レイテンシーとコストを最小化するため、さらに規制条件に対応するために、最寄りのリージョンを選択します。明示的に別のリージョンに移動する場合を除き、特定のリージョンに保管されたオブジェクトは、そのリージョンから移動されることはありません。Amazon S3 AWS リージョンのリストについては、「Amazon Web Services 全般のリファレンス」の「AWS サービスエンドポイント」を参照してください。

    • バケット名には次の条件があります。

      • パーティション内で一意にする必要があります。パーティションは、リージョンのグループです。AWS には、現在 aws (商用リージョン)、aws-cn (中国リージョン)、および aws-us-gov (AWS GovCloud (US) リージョン) の 3 つのパーティションがあります。

      • 3~63 文字で指定する。

      • 小文字、数字、ピリオド (.)、ハイフン (-) のみで構成されます。互換性を最も高くするには、静的ウェブサイトホスティング専用のバケットを除き、バケット名にピリオド (.) を使用しないことをお勧めします。

      • 文字や数字で始まり、文字や数字で終わります。

    • バケットを作成したら、その名前を変更することはできません。

    • バケット名に機密情報を含めないでください。バケット名は、バケット内のオブジェクトを参照する URL に表示されます。

  2. すべてのバケットを一覧表示して、バケットが作成されたことを確認します。

    aws s3 ls
  3. オブジェクト所有権では、ACL を無効化または有効化して、バケットにアップロードされたオブジェクトの所有権を制御できます。

    ACL の無効化

    バケット所有者の強制 (デフォルト) に設定する – ACL は無効になり、バケット所有者は汎用バケット内のすべてのオブジェクトを自動的に所有し、完全に制御します。

    aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls="Rules=[{ObjectOwnership=BucketOwnerEnforced}]"
    注記

    デフォルトでは、ACL は無効になっています。Amazon S3 の最新のユースケースの大部分では ACL を使用する必要がなくなっています。オブジェクトごとに個別に制御する必要がある通常ではない状況を除き、ACL は無効にしておくことをお勧めします。詳細については、「オブジェクトの所有権の制御とバケットの ACL の無効化。」を参照してください。

    ACL の有効化

    • 希望するバケット所有者に設定する – バケット所有者は、他のアカウントが bucket-owner-full-control 既定 ACL でバケットに書き込む新しいオブジェクトを所有し、完全にコントロールできます。

      aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls="Rules=[{ObjectOwnership=BucketOwnerPreferred}]"

      希望するバケット所有者設定を適用して、すべての Amazon S3 アップロードに bucket-owner-full-control 既定 ACL を含めることを要求する場合は、この ACL を使用するオブジェクトアップロードのみを許可する Amazon S3 PUT オペレーションで bucket-owner-full-control 既定 ACL を要求する (バケット所有者の優先) を追加できます。

    • オブジェクトライターに設定する — オブジェクトをアップロードする AWS アカウントは、そのオブジェクトを所有し、そのオブジェクトを完全にコントロールし、ACL を介して他のユーザーにそのオブジェクトへのアクセス権を付与できます。

      aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls="Rules=[{ObjectOwnership=ObjectWriter}]"
    注記

    デフォルト設定は [バケット所有者の強制] です。デフォルト設定を適用して ACL を無効のままにするのに必要なのは、s3:CreateBucket アクセス許可のみです。ACL を有効にするためには、s3:PutBucketOwnershipControls アクセス許可が必要です。

    バケットの現在のオブジェクトの所有権の設定を確認するには。

    aws s3api get-bucket-ownership-controls --bucket amzn-s3-demo-bucket
  4. [ブロックパブリックアクセス] が有効になっている (新しいバケットではデフォルトで有効になっている) ことを確認するには。

    aws s3api get-public-access-block --bucket amzn-s3-demo-bucket

    デフォルトでは、新しいバケットに対して 4 つの [ブロックパブリックアクセス] 設定のすべてが有効になっています。特定のユースケースでオフにする必要のある設定が 1 つ以上あることがわかっている場合を除き、すべての設定を有効にしておくことをお勧めします。ブロックパブリックアクセスの詳細については、Amazon S3 ストレージへのパブリックアクセスのブロック を参照してください。

    [ブロックパブリックアクセス] を有効にする必要がある場合は、次のコマンドを使用します。

    aws s3api put-public-access-block --bucket amzn-s3-demo-bucket --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
    注記

    すべての [パブリックアクセスをブロック] 設定を有効にするのに必要なのは、s3:CreateBucket アクセス許可のみです。[パブリックアクセスをブロック] 設定をオフにするには、s3:PutBucketPublicAccessBlock アクセス許可が必要です。

  5. バケットのバージョニングを有効にするには。

    aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket --versioning-configuration Status=Enabled

    [バケットのバージョニング] は、デフォルトで無効になります。バージョニングとは、同じバケット内でオブジェクトの複数のバリアントを保持する手段です。バージョニングを使用して、 バケットに保存されたあらゆるオブジェクトのあらゆるバージョンを保存、取得、復元することができます。バージョニングを使用すれば、意図しないユーザーアクションからもアプリケーション障害からも、より簡単に復旧できます。バージョニングの詳細については、「S3 バージョニングによる複数のバージョンのオブジェクトの保持」を参照してください。

  6. Amazon S3 Object Lock は、新しいオブジェクトが削除または上書きされないように保護するのに役立ちます。詳細については、「S3 Object Lock を使用したオブジェクトのロック」を参照してください。S3 Object Lock を使用したオブジェクトのロック を有効にするには (バケットのバージョニングが必要です)。

    新しいバケットの場合。

    aws s3api create-bucket --bucket amzn-s3-demo-bucket --region us-east-1 --object-lock-enabled-for-bucket

    既存のバケットの場合。

    aws s3api put-object-lock-configuration --bucket amzn-s3-demo-bucket --object-lock-configuration '{"ObjectLockEnabled": "Enabled"}'

    Object Lock を有効にする S3 Object Lock を使用したオブジェクトのロック と同時にデフォルトを設定する場合は、以下を使用できます。

    aws s3api put-object-lock-configuration --bucket amzn-s3-demo-bucket --object-lock-configuration '{"ObjectLockEnabled":"Enabled","Rule":{"DefaultRetention":{"Mode":"COMPLIANCE","Days":30}}}'

    制限の少ないモードでは "COMPLIANCE""GOVERNANCE" に置き換え、必要に応じて日数を調整できます。

    注記

    Object Lock が有効なバケットを作成するには、s3:CreateBuckets3:PutBucketVersioning および s3:PutBucketObjectLockConfiguration の許可が必要です。

  7. バケットにタグを追加できます。AWS コスト配分では、バケットタグを使用してバケットの使用に対する請求に注釈を付けることができます。タグはキー/値ペアになっており、バケットに割り当てられるラベルを表します。詳細については、「S3 バケットタグでのコスト配分タグの使用」を参照してください。

    バケットにタグを追加するには。

    aws s3api put-bucket-tagging --bucket amzn-s3-demo-bucket --tagging 'TagSet=[{Key=Purpose,Value=Testing},{Key=Environment,Value=Development}]'
  8. バケットと新しいオブジェクトは、暗号化設定の基本レベルとして Amazon S3 マネージドキー (SSE-S3) を使用したサーバー側の暗号化で暗号化されます。バケットのデフォルトの暗号化を確認するには、次のコマンドを使用します。

    aws s3api get-bucket-encryption --bucket amzn-s3-demo-bucket

    バケットに対して、AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) と、AWS KMS キーによる二層式サーバー側の暗号化 (DSSE-KMS) を設定することもできます。AWS マネージドキー (aws/s3) とカスタマーマネージドキーの両方を、SSE-KMS および DSSE-KMS 暗号化設定の AWS KMS キーとして使用できます。カスタマーマネージドキーの詳細については、AWS Key Management Serviceデベロッパーガイドの「カスタマーキーと AWS キー」を参照してください。AWS KMS キーの作成の詳細については、「AWS Key Management Service デベロッパーガイド」の「キーの作成」を参照してください。

    重要

    AWS KMS キーは、Amazon S3 バケットと同じ AWS リージョンに存在する必要があります。クロスリージョン KMS キーは、Amazon S3 バケット暗号化ではサポートされていません。

    SSE-KMS でデフォルトの暗号化を使用するようにバケットを設定する場合は、Amazon S3 バケットキーを使用することもできます。Amazon S3 バケットキーは、Amazon S3 から AWS KMS へのリクエストトラフィックを減らし、暗号化のコストを削減します。詳細については、「Amazon S3 バケットキーを使用した SSE−KMS のコストの削減」を参照してください。Amazon S3 バケットキーは DSSE-KMS ではサポートされていません。AWS CLI では、新しいバケットの作成時に Amazon S3 バケットキーがデフォルトで有効になっていません。これは、デフォルトで有効になっているコンソールの動作とは異なります。

    SSE-KMS を設定し、Amazon S3 バケットキーを有効にするには。

    aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration "{\"Rules\":[{\"ApplyServerSideEncryptionByDefault\":{\"SSEAlgorithm\":\"aws:kms\",\"KMSMasterKeyID\":\"YOUR-KMS-KEY-ARN\"},\"BucketKeyEnabled\":true}]}"

    Amazon S3 バケットキーがバケットに対して有効になっているかどうかを確認するには。

    aws s3api get-bucket-encryption --bucket amzn-s3-demo-bucket

    出力には、true または false に設定された BucketKeyEnabled フィールドが含まれます。

    DSSE-KMS を設定するには、以下のコマンドを使用します。

    aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"aws:kms:dsse","KMSMasterKeyID":"YOUR-KMS-KEY-ARN"}}]}'

    デフォルトの暗号化の詳細については、「Amazon S3 バケット向けのサーバー側のデフォルトの暗号化動作の設定」を参照してください。SSE-KMS に関する詳細は、「Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3)」を参照してください。

    重要

    デフォルト暗号化設定として SSE-KMS または DSSE-KMS オプションを使用する場合、AWS KMS の 1 秒あたりのリクエスト数 (RPS) 制限が適用されます。Amazon S3 バケットキーを有効にすると、KMS API コールを減らすことができます。これにより、AWS KMS に送信されるリクエストの数が減少します。AWS KMS クォータの詳細およびクォータの引き上げをリクエストする方法については、「AWS Key Management Service デベロッパーガイド」の「クォータ」を参照してください。

Amazon S3 にバケットが作成されました。次のステップでは、バケットにオブジェクトをアップロードします。

ステップ 2: バケットにオブジェクトをアップロードする

Amazon S3 でバケットを作成すると、オブジェクトをバケットにアップロードする準備が整います。オブジェクトは、テキストファイル、写真、ビデオなど、どのような種類のファイルでも可能です。

オブジェクトをバケットにアップロードするには
  1. アップロードするシンプルなテキストファイルを作成します。任意のテキストエディタを使用するか、次のコマンドを実行できます。

    echo 'Hello, Amazon S3!' > example.txt
  2. s3 cp コマンドを使用して、ファイルをバケットにアップロードします。

    aws s3 cp example.txt s3://amzn-s3-demo-bucket/

    アップロードが成功すると、次のような出力が表示されます。

    upload: ./example.txt to s3://amzn-s3-demo-bucket/example.txt
  3. バケットのコンテンツを一覧表示して、オブジェクトがアップロードされたことを確認します。

    aws s3 ls s3://amzn-s3-demo-bucket/

オブジェクトがバケットに正常にアップロードされました。次のステップでは、オブジェクトをダウンロードします。

ステップ 3: オブジェクトをダウンロードする

バケットにオブジェクトをアップロード後、オブジェクトに関する情報を表示し、ローカルコンピュータにそのオブジェクトをダウンロードできます。

Amazon S3 バケットからオブジェクトをダウンロードするには
  1. オブジェクトに関する情報を取得するには

    aws s3api head-object --bucket amzn-s3-demo-bucket --key example.txt

    このコマンドは、コンテンツタイプ、コンテンツの長さ、最終更新日など、オブジェクトに関するメタデータを返します。

  2. オブジェクトをローカルコンピューターにダウンロードします。

    aws s3 cp s3://amzn-s3-demo-bucket/example.txt downloaded-example.txt

    ダウンロードが成功すると、次のような出力が表示されます。

    download: s3://amzn-s3-demo-bucket/example.txt to ./downloaded-example.txt
  3. ダウンロードしたファイルのコンテンツを確認します。

    cat downloaded-example.txt
注記
  • コンソールとは異なり、AWS CLI はワイルドカードまたは --recursive フラグを使用して一度に複数のオブジェクトをダウンロードできます。

  • AWS CLI を使用してオブジェクトをダウンロードする場合、オブジェクトキー名の末尾のピリオド (.) は、削除されるコンソールとは異なり、保持されます。これは、オブジェクトキーがピリオドで終わる場合に重要です。

複数のオブジェクトをダウンロードする例。

特定のファイル拡張子を持つ Amazon S3 バケットから複数のオブジェクトをダウンロードするには、例に示すように、exclude および include フィルターで再帰的なコピーコマンドを使用します。

aws s3 cp s3://amzn-s3-demo-bucket/ . --recursive --exclude "*" --include "*.txt"

オブジェクトが正常にダウンロードされました。次のステップでは、オブジェクトをフォルダにコピーします。

ステップ 4: オブジェクトをフォルダにコピーする

バケットにオブジェクトを追加し、そのオブジェクトをダウンロードできました。ここで、フォルダを作成し、オブジェクトをフォルダにコピーします。

オブジェクトをフォルダにコピーするには
  1. Amazon S3 では、フォルダはオブジェクトキーのプレフィックスとして表されます。プレフィックスが付いたオブジェクトをコピーして、「フォルダ」を作成します。

    aws s3 cp s3://amzn-s3-demo-source-bucket/example.txt s3://amzn-s3-demo-destination-bucket/favorite-files/example.txt

    コピーが成功すると、次のような出力が表示されます。

    copy: s3://amzn-s3-demo-source-bucket/example.txt to s3://amzn-s3-demo-destination-bucket/favorite-files/example.txt
  2. フォルダのコンテンツを一覧表示して、オブジェクトがコピーされたことを確認します。

    aws s3 ls s3://amzn-s3-demo-destination-bucket/favorite-files/

オブジェクトをフォルダに正常にコピーしました。次のステップでは、オブジェクトとバケットを削除します。

ステップ 5: オブジェクトとバケットを削除する

オブジェクトまたはバケットが不要になった場合は、それ以上の料金が発生しないように、オブジェクトまたはバケットを削除することをお勧めします。この開始方法のチュートリアルを演習として完了し、バケットまたはオブジェクトを使用する予定がないときは、料金が発生しないようにするため、バケットを削除することをお勧めします。

バケットを削除する前に、バケットを空にするか、バケット内のオブジェクトを削除します。オブジェクトとバケットを削除すると、それらは使用できなくなります。

引き続き同じバケット名を使用したいときは、オブジェクトを削除するか、バケットを空にすることをお勧めします。ただし、バケットは削除しないでください。バケットを削除すると、その名前は再利用できるようになります。ただし、バケットを再利用する前に、別の AWS アカウントで同じ名前のバケットが作成される可能性があります。

オブジェクトの削除

バケットからすべてのオブジェクトを空にせずに、削除するオブジェクトを選択する場合は、オブジェクトを削除できます。

特定のオブジェクトを削除します。

aws s3 rm s3://amzn-s3-demo-bucket/example.txt

削除が成功すると、次のような出力が表示されます。

delete: s3://amzn-s3-demo-bucket/example.txt

バケットを空にする

バケットを削除する場合は、まずバケットを空にする必要があります。これにより、バケット内のすべてのオブジェクト、バージョン、削除マーカーが削除されます。

バケットを空にするには
重要

バケットを空にすると、元に戻すことはできません。バケットを空にするアクションの実行中にバケットに追加されたオブジェクトは削除されます。

  1. オプション 1: 小さいバケットの場合は、rm コマンドと --recursive フラグを使用してバケット内のすべてのオブジェクトを削除します。

    aws s3 rm s3://amzn-s3-demo-bucket --recursive

    このコマンドは、フォルダ内のオブジェクトを含む、バケット内のすべてのオブジェクトを削除します。

    注記

    バケットに多数のオブジェクトまたは大きなオブジェクトが含まれている場合、このコマンドはタイムアウトすることがあります。大量のデータがあるバケットの場合、Amazon S3 ライフサイクルルールを使用してバケット内のオブジェクトを期限切れにします。

    オプション 2: Amazon S3 ライフサイクルルールを使用する (大きなバケットに推奨)

    多数のオブジェクトまたは大きなオブジェクトを持つバケットの場合、Amazon S3 ライフサイクルルールを使用して、すべてのオブジェクトを自動的に期限切れにし、削除します。ライフサイクルルールが処理されるまで待ちます (これには最大 24 時間かかる場合があります)。ライフサイクルルールを使用してバケットを空にする方法については、「ライフサイクル設定ルールを使用して Amazon S3 バケットを空にするにはどうすればよいですか?」を参照してください。

  2. バケットが空であることを確認します。

    aws s3 ls s3://amzn-s3-demo-bucket
  3. バケットでバージョニングが有効になっている場合は、次のコマンドを使用してバージョニングされたオブジェクトと削除マーカーを削除します。

    バージョニングされたオブジェクトを削除します。

    aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete "$(aws s3api list-object-versions --bucket amzn-s3-demo-bucket --output json --query='{Objects: Versions[].{Key:Key,VersionId:VersionId}}')"

    削除マーカーを削除します。

    aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete "$(aws s3api list-object-versions --bucket amzn-s3-demo-bucket --output json --query='{Objects: DeleteMarkers[].{Key:Key,VersionId:VersionId}}')"
  4. バケットにすべてのオブジェクトバージョンと削除マーカーがないことを確認します。

    aws s3api list-object-versions --bucket amzn-s3-demo-bucket

    出力には、残りのバージョンや削除マーカーは表示されません。

バケットの削除

バケットを空にするか、バケットからすべてのオブジェクトを削除した後、バケットを削除できます。

重要

バケットを削除すると、元に戻すことはできません。バケット名は一意です。バケットを削除すると、別の AWS ユーザーがその名前を使用できます。同じバケット名を引き続き使用する場合は、バケットを削除しないでください。代わりに、バケットを空にして保管しておきます。

バケットを削除するには
  1. バケットを削除します。

    aws s3api delete-bucket --bucket amzn-s3-demo-bucket
  2. すべてのバケットを一覧表示して、バケットが削除されたことを確認します。

    aws s3 ls

次のステップ

上記の例で、AWS CLI を使用するいくつかの基本的な Amazon S3 のタスクをどのように実行するかを学びました。

次のトピックでは、Amazon S3 をより深く理解して、アプリケーションに実装できるようにするために使用できるラーニングパスについて説明します。

次のリストは、Amazon S3 の一般的な AWS CLI コマンドを示しています。

  • cp – ローカルファイルシステムと Amazon S3 の間、または Amazon S3 の場所の間でファイルまたはオブジェクトをコピーします

  • ls – 指定されたバケットとプレフィックスの下に Amazon S3 オブジェクトと一般的なプレフィックスを一覧表示します

  • mb – Amazon S3 バケットを作成します

  • mv – ローカルファイルシステムと Amazon S3 の間、または Amazon S3 の場所の間でファイルまたはオブジェクトを移動します

  • presign – AWS 認証情報なしで一時的なアクセスを許可する Amazon S3 オブジェクトの署名付き URL を生成します

  • rb – 空の Amazon S3 バケットを削除します。--force フラグを使用して、1 つのコマンドでコンテンツを含むバケットを自動的に空にして削除できます。この操作は元に戻すことができません。

  • rm – Amazon S3 からオブジェクトを削除します

  • sync – ソースディレクトリからコピー先に新規および更新されたファイルを再帰的にコピーすることで、ディレクトリと Amazon S3 プレフィックスを同期します。

  • website – バケットを静的ウェブサイトとして設定します

Amazon S3 の AWS CLI コマンドの詳細については、次のリソースを参照してください。

  • s3 – 一般的な操作を簡素化する高レベルの Amazon S3 コマンド

  • s3api – すべての Amazon S3 API オペレーションへの直接アクセス

  • s3control – すべての Amazon S3 コントロール API オペレーションへの直接アクセス