AWS再入門ブログリレー Amazon S3編

『AWS 再入門ブログリレー 2020』 6 日目の Amazon S3 の記事です。
2020.08.11

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

こんにちは、たぬき( @tanuki_tzp )です。

当エントリは弊社コンサルティング部による『AWS 再入門ブログリレー 2020』の 6 日目のエントリです。

このブログリレーの企画は、普段 AWS サービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。

AWS をこれから学ぼう!という方にとっては文字通りの入門記事として、またすでに AWS を活用されている方にとっても AWS サービスの再発見や 2020 年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。

では、さっそくいってみましょう。 6 日目のテーマは『Amazon S3』です。

Amazon S3 とは

概要

Amazon S3 の正式名称は "Amazon Simple Storage Service"です。
S3 は AWS が提供しているインターネット経由で利用可能なオブジェクトストレージサービスです。
主な特徴は以下となります。

  • 高耐久・高可用
  • 結果整合性
  • データのバージョニング機能
  • コスト最適化のための複数のストレージクラス
  • データのライフサイクル移行が可能
  • 詳細なアクセス制限が可能

2020/12/19追記: S3 は結果整合性ではなく、強い書き込み後の読み込み整合性が適応されるようになりました

Amazon S3 のご紹介(日本語字幕)

バケット・オブジェクト

バケットは S3 にデータを保存するための容器、オブジェクトはデータ+データを格納するための要素で構成された塊のイメージです。

↓バケットとオブジェクトのイメージ

オブジェクト内に含まれる要素の詳細はAmazon S3 オブジェクトの使用をご参照ください。

バケットサイズ・オブジェクトサイズ

S3のバケットサイズは容量に制限がないため、残容量を気にせずに使用することができます。
しかし、1つのオブジェクトのサイズは最大 5[TB] までとなっています。
また、1度でアップロードできるオブジェクトサイズは最大 5[GB] と制限されており、5[GB] を超えるオブジェクトをアップロードするためにはマルチパートアップロードを使用しなければなりません。

高耐久・高可用

S3 はすべてのストレージクラスでオブジェクトの耐久度が99.999999999%(イレブンナイン)を達成するよう、設計されています。

また、可用性についてもすべてのストレージクラスで SLA が99%以上となっており、可用性も高い水準で維持されていますが、ストレージクラスごとに数値が異なるため、詳しい数値はストレージクラスでご紹介します。

ストレージクラス

Amazon S3 では、現在6種のストレージクラスが提供されています。

S3 Standard (S3 標準)

  • アクセス頻度が高いデータ向け
  • 複数アベイラビリティーゾーン( AZ )にデータを保管する(最低3ヵ所)

S3 Intelligent-Tiering (S3 Intelligent-Tiering)

  • アクセス頻度が予測できないデータ向け
  • アクセス頻度をモニタリングし、コスト効率の良いストレージクラスへ自動移行する
  • 複数アベイラビリティーゾーン( AZ )にデータを保管する(最低3ヵ所)

S3 Standard-IA (S3 標準 - IA)

  • アクセス頻度が低いデータ向け
  • S3 Standard (S3 標準)より低いコストで利用できるが、S3 Standard-IA (S3 標準 - IA)からデータの取り出し時に 1[GB] あたりの料金が加算される
  • 複数アベイラビリティーゾーン( AZ )にデータを保管する(最低3ヵ所)

S3 One Zone-IA (S3 1ゾーン - IA)

  • アクセス頻度が低いデータ向け
  • S3 Standard-IA (S3 標準 - IA)より低いコストで利用できる
  • データを保管するアベイラビリティゾーン( AZ )は1ヵ所のため、該当 AZ が破壊されるとデータは損失する

S3 Glacier (S3 Glacier)

  • データアーカイブ用ストレージ
  • 過去のログの保管など、アクセス頻度が低く長期保管するデータ向け
  • 複数アベイラビリティーゾーン( AZ )にデータを保管する(最低3ヵ所)
  • データの取り出しオプションは迅速・標準・大容量の3種類でそれぞれ 1[GB] あたりの取り出し料金が異なる

参考:[ap-northeast-1]Amazon S3 Glacier 料金 (Glacier API のみ)

S3 Glacier Deep Archive(S3 Glacier Deep Archive)

  • データアーカイブ用ストレージ
  • S3 Glacier (S3 Glacier)より更に低頻度アクセスのデータ向け
  • 最も低コストのストレージクラス
  • 複数アベイラビリティーゾーン(AZ)にデータを保管する(最低3ヵ所)
  • データの取り出しには最大12時間かかる

ストレージクラスまとめ

ストレージクラス S3 Standard S3 Intelligent-Tiering S3 Standard-IA S3 One Zone-IA S3 Glacier S3 Glacier Deep Archive
設計上の耐久性 99.999999999% 99.999999999% 99.999999999% 99.999999999% 99.999999999% 99.999999999%
設計上の可用性 99.99% 99.9% 99.9% 99.5% 99.99% 99.99%
可用性SLA 99.9% 99% 99% 99% 99.9% 99.9%
アベイラビリティゾーン ≥3 ≥3 ≥3 1 ≥3 ≥3
データ取り出し料金 なし なし 1[GB]毎 1[GB]毎 1[GB]毎 1[GB]毎
ライフサイクル移行 対応有 対応有 対応有 対応有 対応有 対応有

ストレージクラスの選択で最も重要になるのはデータのサイズと取り出し頻度だと思います。
ライフサイクル移行については次項で説明します。

また、ストレージ利用などの料金については変動があるため、以下のページをご参照ください。
参考:[ap-northeast-1]ストレージ料金表

結果整合性

S3 はオブジェクトを複数アベイラビリティゾーン( AZ )にレプリケートします。
オブジェクトのレプリケートが完了するまでにタイムラグが発生するため、新しいオブジェクトをアップロードした直後にアクセスするとオブジェクトが表示されない状態になる可能性があります。



また、オブジェクトが更新・削除された場合、すべての AZ に変更が適応されるまで、更新・削除前のオブジェクトにアクセスできる可能性があります。
これを結果整合性といいます。
オブジェクトの更新が反映される前に複数発生した際は、最後に更新した処理が反映されます。

詳しくはAmazon S3 の結果整合性と読み取り一貫性をご参照ください。

バージョニング機能

オブジェクトはバージョニング機能を有効にすると、バージョンIDが付与されます。
誤ってデータを更新してしまった場合、更新したデータは別のバージョンIDが付与され、新しいオブジェクトとして保存されます。
新しいオブジェクトとして保存された更新後オブジェクトを削除することで、変更を切り戻すことができます。
また、誤って削除してしまった場合にも、削除マーカーが付与された新しいオブジェクトとして保存されるため、データを復元することができます。
バージョニング機能は保持する世代数分のコストがかかりますが、操作ミスによるデータの損失を防ぐのに有効な機能です。

データのライフサイクル移行

S3に保管するデータの中には、一定期間後に削除、または、低頻度アクセスのストレージクラスに移行させたいオブジェクトが出てきます。
例えば、アクセスログなどのログデータは特にオブジェクト数が増えやすく、また、時間が経つにつれ、アクセス頻度も下がるデータだと思います。
それらにライフサイクルルールを適応することで自動でストレージクラスの移行・オブジェクトの削除を実行させることができます。

移行アクション

  • 別のストレージクラスにオブジェクトを移行する
  • オブジェクトの作成日からカウントする
  • 移行できるストレージクラスには制限があるため、注意が必要

参考:Amazon S3 ライフサイクルを使用したオブジェクトの移行

有効期限 (削除) アクション

  • オブジェクトの有効期限(削除日)を指定できる
  • オブジェクトの作成日からカウントする

参考:オブジェクトの有効期限について

セキュリティ

S3 のアクセスコントロールは IAM、バケットポリシー、アクセスコントロールリスト( ACL )で行います。
ユーザ操作のコントロールはIAM、バケット全体のアクセス許可についてはバケットポリシー、オブジェクト単体のアクセス許可については ACL でコントロールできるので、組み合わせることで柔軟な対応ができます。

アクセスコントロールの詳細は以下の記事にまとめられていますので、是非ご参照ください。
S3のアクセスコントロールが多すぎて訳が解らないので整理してみる

静的Webサイトの作成

S3のホスティング設定を使用して、静的なWebサイトを簡単に立ち上げることができます。
以下の記事に手順が詳しく説明されていますので、是非ご参照ください。
【初心者向け】営業がS3を利用して静的Webサイトを立ち上げてみた

おわりに

S3 の要点をまとめようとすると延々と文字数が増えていくので、今回はアソシエイトレベルに絞ってまとめてみました。
細かいルールが多いため、実際に手を動かしながら確認していただくことで S3 への理解が深まると思います。

以上、『AWS 再入門ブログリレー 2020』の 6 日目のエントリ『Amazon S3』編でした。明日 (8/12) は恩塚さんの「ALB/NLB/ELB」の予定です。お楽しみに!!