第4回:ライフサイクル管理とバージョニング
はじめに
S3は、ただファイルを保存するだけでなく、データのライフサイクル(生存期間)を自動で管理し、予期せぬデータ損失を防ぐための高度な機能を提供しています。これらの機能を活用することで、運用コストを大幅に削減し、データの安全性を向上させることができます。
今回は、S3の運用コスト最適化に欠かせないライフサイクル管理と、データの保全に貢献するバージョニング、そしてデータの変更を検知するイベント通知について、AWS CLIを使った設定方法を解説します。
バージョニング
バージョニングは、オブジェクトの複数のバージョンを同じバケット内に保持する機能です。これにより、誤った削除や上書きからデータを保護できます。
1. aws s3api put-bucket-versioning
によるバージョニングの有効化
バージョニングを有効にするには、aws s3api
コマンドを使用します。
aws s3api put-bucket-versioning \
--bucket my-versioning-bucket \
--versioning-configuration Status=Enabled
このコマンドを実行すると、バケット内で新しく作成または更新されたオブジェクトは、バージョンIDが付与されて保存されるようになります。
2. バージョニングされたオブジェクトの確認方法
バージョニングが有効なバケット内で aws s3 ls
コマンドを実行しても、最新のバージョンしか表示されません。すべてのバージョンを確認するには、s3api
の list-object-versions
コマンドを使用します。
aws s3api list-object-versions \
--bucket my-versioning-bucket
このコマンドの出力には、各オブジェクトのキー、バージョンID、最終更新日時などが含まれます。
3. 古いバージョンのオブジェクトの削除方法
バージョニングが有効なバケットで aws s3 rm
コマンドを実行すると、削除マーカーという特殊なオブジェクトが作成され、最新のバージョンが非表示になるだけで、データ自体は削除されません。
オブジェクトの特定のバージョンを完全に削除するには、バージョンIDを指定して aws s3api delete-object
コマンドを使用します。
aws s3api delete-object \
--bucket my-versioning-bucket \
--key my_file.txt \
--version-id "VERSION_ID_OF_OBJECT"
すべてのバージョンを一括で削除するには、list-object-versions
と組み合わせてスクリプトを作成するのが一般的です。
ライフサイクルルール
ライフサイクルルールは、オブジェクトのストレージクラスを自動で変更したり、一定期間後にオブジェクトを削除したりする機能です。これにより、アクセス頻度に応じて安価なストレージクラスに移行し、コストを削減できます。
1. ライフサイクルルールのJSONを作成し、aws s3api put-bucket-lifecycle-configuration
で設定
ライフサイクルルールは、JSON形式で定義します。以下のJSONは、logs/
プレフィックスを持つオブジェクトを、作成から30日後に Glacier
に移行し、90日後に完全に削除するルールです。
{
"Rules": [
{
"ID": "MoveToGlacierAndExpire",
"Status": "Enabled",
"Filter": {
"Prefix": "logs/"
},
"Transitions": [
{
"Days": 30,
"StorageClass": "GLACIER"
}
],
"Expiration": {
"Days": 90
}
}
]
}
このJSONファイル(例:lifecycle-rule.json
)を準備し、以下のコマンドでバケットに設定します。
aws s3api put-bucket-lifecycle-configuration \
--bucket my-lifecycle-bucket \
--lifecycle-configuration file://lifecycle-rule.json
2. ルールの確認と削除
設定したライフサイクルルールを確認するには、aws s3api get-bucket-lifecycle-configuration
コマンドを使用します。
aws s3api get-bucket-lifecycle-configuration \
--bucket my-lifecycle-bucket
不要になったルールを削除するには、aws s3api delete-bucket-lifecycle
コマンドを実行します。
aws s3api delete-bucket-lifecycle \
--bucket my-lifecycle-bucket
S3イベント通知
S3イベント通知は、バケット内で特定のイベント(例:オブジェクトの作成、削除)が発生した際に、Lambda関数、SQSキュー、またはSNSトピックに通知を送信する機能です。これにより、S3をトリガーとしてさまざまな処理を自動化できます。
aws s3api put-bucket-notification-configuration
を使ったイベント通知設定
通知設定も、JSONファイルで定義します。以下のJSONは、新しいオブジェクトが作成された際に、指定したSNSトピックに通知を送信する設定例です。
{
"TopicConfigurations": [
{
"Id": "NewObjectNotification",
"TopicArn": "arn:aws:sns:ap-northeast-1:123456789012:my-s3-notification-topic",
"Events": [
"s3:ObjectCreated:*"
]
}
]
}
このJSONファイル(例:notification-config.json
)を準備し、以下のコマンドでバケットに設定します。
aws s3api put-bucket-notification-configuration \
--bucket my-notification-bucket \
--notification-configuration file://notification-config.json
注意点: S3イベント通知を設定する前に、SNSトピックやIAMロールなど、連携先のAWSリソースを事前に作成しておく必要があります。
まとめ
第4回では、S3のコストと安全性を向上させるための高度な機能について学びました。
本記事のポイント
-
バージョニングは、オブジェクトの履歴を保持し、誤った削除や上書きからデータを守るための重要な機能です。
aws s3api put-bucket-versioning
で有効化できます。 - ライフサイクルルールを使えば、コストを削減するために、古いオブジェクトを安価なストレージクラスに自動で移行したり、不要なオブジェクトを削除したりできます。
- S3イベント通知は、オブジェクトの変更をトリガーに、他のAWSサービスとの連携を自動化する強力な機能です。
これらの機能を適切に組み合わせることで、S3をより効率的かつ安全に運用することができます。
次回の最終回では、これまでの知識を総動員して、実践的なシェルスクリプトの作成や、S3コマンド使用時のトラブルシューティングについて解説します。