📂

AWS S3のStorage ClassをAWS CLIから変更する手順

2024/01/18に公開

0. 概要

本記事では、AWS S3のStorage ClassをAWS CLIから変更する手順について紹介します。
Storage Classはデータの保存方法を指定するための重要な概念で、適切な設定によりコストやパフォーマンスを最適化できます。AWS CLIを使用してStorage Classを変更する方法を詳しく説明します。

実行環境:

  • macOS M1
  • aws-cli 2.15.9

取り扱わないこと:

  • AWS CLIの使い方
  • シェルスクリプトの使い方

ソースコード:
https://github.com/shuhei-fujita/change-storage-class

1. Storage Classとは

Storage Classは、AWS S3でデータを保存する際の設定であり、データのアクセス頻度や保存コストに影響を与えます。
異なるStorage Classを選択することで、データのニーズに合わせた最適な保存方法を選択できます。

aws s3
20190220 AWS Black Belt Online Seminar Amazon S3 / Glacier | https://www.slideshare.net/AmazonWebServicesJapan/20190220-aws-black-belt-online-seminar-amazon-s3-glacier#45

2. Storage Classの設定可能な値

AWS CLIを使用してStorage Classを変更する際に使用できる主要な設定値は以下の通りです:

--storage-classで設定可能な値
https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html#options

各Storage Classには異なる特性があり、データのアクセス頻度や可用性に応じて選択できます。

STANDARD
REDUCED_REDUNDANCY
STANDARD_IA
ONEZONE_IA
INTELLIGENT_TIERING
GLACIER
DEEP_ARCHIVE
OUTPOSTS
GLACIER_IR
SNOW
EXPRESS_ONEZONE

3. Storage Classを変更する手順

AWS CLIを使用してStorage Classを変更するには、aws s3api copy-object コマンドを使用します。以下は、具体的なコマンドの例です:

※ s3コマンドは一般的な操作を簡単に実行できますが詳細な設定や制御が必要な今回のような場合には、s3apiコマンドを使用します

1. ディレクトリ作成から、S3へアップロードするためのファイル作成までのコマンドを実行

mkdir change-storage-class \ 
    && cd change-storage-class \
    && touch sample.txt \
    && echo "Hello World" > sample.txt \
    && ls -l

2. S3バケットを作成

~/change-storage-class $ aws s3 mb s3://change-storage-class --profile fujita

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

~/change-storage-class $ aws s3 sync . s3://change-storage-class --profile fujita

4. S3バケットのファイルを確認

$ aws s3 ls s3://change-storage-class --profile fujita
2024-01-18 23:10:03      35760 sample.txt

5. S3バケットのファイルのStorage Classを確認

$ aws s3api list-objects --bucket change-storage-class --query 'Contents[].{Key: Key, StorageClass: StorageClass}' --profile fujita
[
    {
        "Key": "sample.txt",
        "StorageClass": "ONEZONE_IA"
    }
]
(END)

コマンドの説明:

aws s3api list-objects --bucket <バケット名> --query 'Contents[].{Key: Key, StorageClass: StorageClass}' --profile <プロファイル名>

6. S3バケットの特定ファイルのStorage Classを変更

これにより、指定したオブジェクトのStorage Classが変更されます。変更前と変更後のStorage Classを確認するには、aws s3api list-objects コマンドを使用します。

$ aws s3api copy-object --bucket change-storage-class --copy-source "change-storage-class/sample.txx" --key "sample.txt" --storage-class ONEZONE_IA --profile fujita

コマンドの説明:

aws s3api copy-object --bucket <バケット名> --copy-source "<バケット名>/<オブジェクトキー>" --key "<オブジェクトキー>" --storage-class <新しいStorage Class> --profile <プロファイル名>

以下のソースコードは、S3バケットの全てのファイルのStorage Classを変更するシェルスクリプトです。

#!/bin/bash

BUCKET_NAME="change-storage-class"
PROFILE="fujita"
STORAGE_CLASS_NAME="ONEZONE_IA" # デフォルトのストレージクラスは STANDARD

echo 'before'
echo $(aws s3api list-objects --bucket change-storage-class --query 'Contents[].{Key: Key, StorageClass: StorageClass}' --profile fujita)

for key in $(aws s3api list-objects --bucket $BUCKET_NAME --query 'Contents[].Key' --output text --profile $PROFILE)
do
  aws s3api copy-object --bucket $BUCKET_NAME --copy-source "${BUCKET_NAME}/${key}" --key "$key" --storage-class $STORAGE_CLASS_NAME --profile $PROFILE > /dev/null
done

echo 'after'
echo $(aws s3api list-objects --bucket change-storage-class --query 'Contents[].{Key: Key, StorageClass: StorageClass}' --profile fujita)

参考資料

AWS S3のStorage Classについてのリファレンス

AWS CLIのS3についてのリファレンス

aws s3apiの--storage-classオプションで設定可能な値

AWS CLIの設定ファイル(--profile)について

GitHubで編集を提案

Discussion