AWS S3 Glacierを使ってみる

こんにちは、エンジニアの蛯沢です。
みなさんはAWS使っていますか?
私は最近は使っていなかったのですが、必要に迫られて数年ぶり(5年ぶり?)にAWS Glacierを使いました。
数年使っていなかったら色々変わっていたので備忘も兼ねて記事にしてみました。

AWS Glacierとは?

GlacierはたくさんあるAWSのサービスの1つで、低コストで大容量のデータ保存に向いているストレージです。
低コストですが融通はききません。フォルダやファイル名という概念が無く、
アップロードした時点で付与されるidで管理します。
ダウンロードする時はすぐにはダウンロードすることは出来ず、リクエストしてから約5時間後にダウンロードが可能になります。
最低保存期間は3ヶ月で、アップロードしてから3ヶ月以内にデータを削除しても3ヶ月分課金されます。
使い勝手は悪いですが、普段使うことの無いバックアップデータを長期間保存するなら安くて助かります。

Glacierの最新事情

数年ぶりに使うので、いろいろ変わっているだろうと思い、まずは最新事情を調べててみました。

GlacierはS3 Glacierとして、S3に統合されていました!(気付くのが数年遅い)
また、glacierも種類が増えて、
・S3 Glacier Instant Retrieval
・S3 Glacier Flexible Retrieval(旧Glacier)
・S3 Glacier Deep Archive
と3種類あるようです。
この中で、S3 Glacier Deep Archiveというのが今までのGlacierよりさらに低コストで、だいたい1TBあたり1ドル/月です。
S3に統合されたおかげで、ブラウザからでもGlacierへアップロード可能になっています。

今回は試しにaws cliでDeep Archiveへアップロードしてみます。

  • backup202312という名前のバケット(ディレクトリみたいなもの)を作成
  • aws s3api create-bucket --bucket backup202312
    
  • ローカルにあるbackup.tar.gzを↑で作ったバケットにアップロード
  • aws s3 cp --storage-class DEEP_ARCHIVE backup.tar.gz s3://backup202312/backup.tar.gz
    

    これだけです。(実際はもっと細かな設定しますが)
    以前は、glacierへアップロードする場合、大きなファイルだとタイムアウト等で失敗する場合もあり、自前で分割&並列アップロードするスクリプトを作成していました。
    s3では

    aws configure set default.s3.max_concurrent_requests 10
    aws configure set default.s3.multipart_chunksize 100MB
    

    とするだけで100MBずつ10本並列でアップロードできます。
    あの時の苦労は何だったんだ….

    参考記事:https://aws.amazon.com/jp/about-aws/whats-new/2018/11/s3-glacier-api-simplification/

    Glacier Deep Archiveへの移行

    以前にGlacierへアップロードしたバックアップデータは現在も保存したままですが、料金を確認したところ、1TBあたり3.6ドル/月(2023年12月現在)となっています。
    DeepArchiveへ移行すれば、1TBあたり約1ドル/月なので費用を 1/3.6 に抑えることが出来ます。
    時間を見つけて、DeepArchiveへ移行しようと思います。

    反省

    いろいろ調べたら、2019年には既にDeepArchiveはあったようです。
    毎月コストかかっているものなので放置するはダメですね。
    今後は定期的に動向チェックするようにしようと思います。

    皆さんもバックアップの保存先にS3 Glacierはいかがでしょうか?(宣伝ではないですw)