0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS S3コマンドの基本から応用までの使い方を全5回で整理してみる - 第4回:ライフサイクル管理とバージョニング

Posted at

第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 コマンドを実行しても、最新のバージョンしか表示されません。すべてのバージョンを確認するには、s3apilist-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コマンド使用時のトラブルシューティングについて解説します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?