AWS Transfer Familyでデータをアーカイブすることで保存料金を削減してみる

2023.01.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、コンサルティング部の南です。

AWS Transfer Familyは簡単にSFTPサーバーを構築できるサービスとなります。
比較的大きなファイルのやり取りを行いたいとなった場合によく採用されるソリューションです。
ですが、ある程度運用を続けているとS3の保存料金が気になる場合もあると思います。
今回はGlacierの一つであるGlacier Instant Retrievalを利用することで利用頻度の低いデータをアーカイブして、保存料金を削減する方法をお伝えします。

AWS Transfer FamilyでGlacierを利用する場合

現在、AWSにはGlacierと付く名前のストレージクラスは3つあります。

ストレージクラス 最小ストレージ期間 課金対象となる最小オブジェクトサイズ 保存料金 取り出し時間 取り出し料金 (GB あたり) :
S3 標準 - - 0.025USD/GB 即時 -
Glacier Instant Retrieval 90 日間 128 KB 0.005USD/GB 即時 0.03USD
Glacier Flexible Retrieval (旧 Glacier) 90 日間 - 0.0045USD/GB 迅速取り出し時間 : 250 MB 以下の取り出しの場合、通常 1~5 分以内
標準取り出し時間 : 3~5時間
一括取得時間 : 5~12時間
迅速取り出し時間 : 0.033USD
標準取り出し時間 : 0.011USD
一括取得時間 : 無料
Glacier Deep Archive 180 日間 - 0.002USD/GB 標準取り出し時間 : 12時間以内
一括取得時間 : 48時間以内
標準取り出し時間 : 0.022USD
一括取得時間 : 0.005USD

※ 取り出し料金に関して
データ取り出し (GB あたり)以外にも「PUT、COPY、POST、LIST リクエスト (1,000 リクエストあたり)」、「GET、SELECT、他のすべてのリクエスト (1,000 リクエストあたり)」、「ライフサイクル移行リクエスト (入) (1,000 件のリクエストあたり)」、「データ取り出しリクエスト (1,000 リクエストあたり)」 で料金がかかりますが、ここでは省略しております。

基本的にGlacierを選定する場合は「取り出し時間」をどの程度許容できるか? どの程度のコスト削減を行うか? を基準にするかと思います。

AWS Transfer FamilyではGlacier Instant Retrieval以外のGlacierはあまり使い勝手が良くないと考えております。 一番の理由として、Glacier Flexible RetrievalGlacier Deep Archiveではマネジメントコンソール、AWSCLIにて「復元」作業が必要となることが挙げられます。

Glacier Flexible RetrievalGlacier Deep ArchiveをSFTPサーバーで利用する場合

  1. マネジメントコンソール, AWS CLIにて取得したいファイルの「復元」作業を行う
  2. 復元完了まで待機
  3. SFTPを利用してファイルを取得する

の手順を踏む必要があります。 一方Glacier Instant Retrievalであれば復元作業が不必要の為、マネジメントコンソール, AWS CLIで操作することなくファイルの取得が可能です。

実際に実装してみる

仕組みとしてはライフサイクルルールで特定のフォルダ(ここではarchive/)に対して即時でGlacier Instant Retrievalに移行するルールを作成します。
アーカイブしたいファイルをSFTPでarchive/フォルダに移動することで、ルールが適用されるという仕組みです。

注意点

実装する上でのポイントや注意点がいくつかあるので説明します。誤った運用をしてしまうとS3 標準を利用する場合よりもコストが高くなってしまう可能性もあります。

プレフィックスを指定する場合の注意点

プレフィックスを指定することで特定のオブジェクトのみに適用させることが出来ます。 今回の例の通り、フィルタを「archive/」と指定する場合、archive/以下の全てのオブジェクトにルールが適用されます。
プレフィックスフィルターの末尾には「/」が必要です。「/」がプレフィックスフィルターの先頭にある場合、ライフサイクルルールは正しく評価されませんので注意が必要です。

取り出し料金がかかる点について

全てのGlacierに共通することですが、Glacier Instant Retrievalでも取り出した容量(0.03USD/GB)に応じて料金がかかってしまいます。
いくら保存料金が安くても、頻繁にファイルをダウンロードする必要がある場合はアーカイブする必要があるのかを見直す必要があります。

ストレージクラスを移行する際に料金がかかる点について

S3ではストレージクラスを移行する際に「ライフサイクル移行リクエスト (入) (1,000 件のリクエストあたり)」という料金がかかります。
Glacier Instant Retrievalでは1000件のリクエスト(1000個のファイル当たり)0.02USD課金されます。
その為、一つ一つの容量が小さく、大量のファイルが存在するようなケースの場合、想定外のコストがかかる可能性もありますので、注意が必要です。
その場合は「最小オブジェクトサイズ」を調節することで防ぐことが出来ます。

オブジェクト作成後の日数について

特定のフォルダに移動された際にルールを適用させる為に「オブジェクト作成後の日数」を0と設定しておりますが、実際には即時で適用されるわけではありません。

ドキュメントに記載の通り、オブジェクトの移行日を翌日の午前 0 時 (UTC) に丸めますので、実際にはタイムラグが存在します。

Amazon S3 calculates the time by adding the number of days specified in the rule to the time when the new successor version of >the object is created and rounding the resulting time to the next day midnight UTC. For example, in your bucket, suppose that >you have a current version of an object that was created at 1/1/2014 10:30 AM UTC. If the new version of the object that >replaces the current version is created at 1/15/2014 10:30 AM UTC, and you specify 3 days in a transition rule, the transition >date of the object is calculated as 1/19/2014 00:00 UTC.

https://docs.aws.amazon.com/AmazonS3/latest/userguide/intro-lifecycle-rules.html#intro-lifecycle-rules-number-of-days

運用

実際に運用する際はSFTPでアーカイブしたいファイル、フォルダをarchive/配下に移動させることでアーカイブすることが出来ます。
前述の通り、Glacier Instant Retrievalは「復元」作業が必要ない為、アーカイブしたオブジェクトに対してもSFTPからダウンロードすることが出来ます。