AWS -S3-

今回はAWS S3について簡単に機能とかを書いていきます。
今回もAWS学習での復習のような感じで投稿しているので、自分なりにわかればいいかなって感じの投稿です。

AWS S3とは

 S3は、オブジェクトストレージサービスです。
 オブジェクトストレージとは、データをオブジェクト単位で管理する形式を指します。
 S3の特徴は、多機能であり誰でも簡単に扱えるように様々な機能が用意されています。使用する分だけ料金を払えば良いので初期投資も最小限で済みます。

AWSのストレージサービス

 まず、AWSは3つの形式のストレージサービスを提供しています。

◯ ブロックストレージ
 ・EC2にアタッチして活用するディスクサービス。
 ・ブロック形式でデータを保存。
 ・高速、高帯域幅。
 ・例)EBS、インスタンスストア

◯ オブジェクトストレージ
 ・安価かつ高い耐久性を持つオンラインストレージ。
 ・オブジェクト形式でデータを保存。
 ・例)S3、Glacier

◯ ファイルストレージ
 ・複数のEC2インスタンスから同時にアタッチ可能な共有ストレージサービス。
 ・ファイル形式でデータを保存
 ・例)EFS

S3について

 ユーザーがデータを容量制限なく保存可能なマネージド型で提供されているオブジェクト型ストレージです。

【特徴】
・高い耐久性
  99.999999999%
・安価なストレージ
  容量単価:月額1GB / 約2.5円
・スケーラブルで安定した性能
  データは冗長化されて保存され、データ容量に依存しない性能がAWS側で保証される。
・暗号化
  転送中や保存時にデータの暗号化が可能。

【データ保存形式】
・バケット
  オブジェクトの保存場所。名前はグローバルでユニークな必要かある。
・オブジェクト
  S3に格納されるファイルでURLが付与される。バケット内オブジェクト数は無制限。
・データサイズ
  データサイズは0KBから5TBまで保存可能。

S3のオブジェクト構成

 S3のオブジェクトは以下のような要素で構成されている。
・Key
  オブジェクトの名前であり、バケット内のオブジェクトは一意に識別する。
・Value
  データそのものであり、バイト値で構成される。
・バージョンID
  バージョン管理に用いるID。
・メタデータ
  オブジェクトに付随する属性の情報。
・サブリソース
  バケット構成情報を保存及び管理するためのサポートを提供する。例)アクセス制御リスト(ACL)

  S3はバケット単位で保存スペースを区別し、オブジェクトでデータを格納する。
 バケットを様々なリージョンに作成することができ、その中にオブジェクトとして様々なファイルが格納されている。

ストレージタイプ

 ストレージタイプは、S3の用途に応じて選択する。

◯ Standard(スタンダード)
 【特徴】
   ・複数箇所にデータを複製するための耐久性が非常に高い。
 【性能】
    ・耐久性:99.999999999%
       ・可用性:99.99%

◯ StandardーIA
  【特徴】
    ・スタンダードに比べて安価。
    ・データの読み出し容量に応じた課金
  【性能】
    ・耐久性:99.999999999%
    ・可用性:99.9%

◯ One ZoneーIA
  【特徴】
    ・アクセス頻度は低いが、必要に応じてすぐに取り出すデータ向け。
  【性能】
    ・耐久性:99.999999999%
    ・可用性:99.5%

◯ RRS
  【特徴】
    ・Reduced Redundancy Storage低冗長化ストレージ。
    ・Glacierから取り出したデータ配置等。
  【性能】
    ・耐久性:99.99%
    ・可用性:99.99%

◯ Amazon Glacier
  【特徴】
    ・最安のアーカイブ用ストレージ。
    ・データ抽出にコストと時間(3~5時間)を要する。
    ・ライスサイクルマネジメントで指定。
    ・ボールロック機能でデータを保持。
  【性能】
    ・耐久性:99.999999999%
    ・可用性:N/A

 スタンダードより、アクセス頻度が低く、中長期にわたってデータを保存する場合はIAシリーズなどを選択する。
 IAは、低頻度アクセスストレージで、Standard-IAが標準の低頻度アクセスストレージになる。

 One Zone-IAは、複数AZにわかれていない一つのAZで完結するので可用性が落ちる。なので、バックアップのデータや一時的なデータをなど、あまり重要ではないデータを保存する場合に使用する。

 Amazon Glacierは、S3 Glacierとも呼ばれ、Glacierというサービス単独でありつつもS3のストレージタイプとしても使われている。こちらは耐久性も高く、IAよりも安いがその分性能は悪く、データ取得に標準でも数時間、迅速取り出しタイプでも数分かかってしまう。
 基本的には、中長期データを保存して、スタンダードに入れていたが使わないと判断したものを入れていくというような形で使用していく。

S3の料金形態

 S3の料金は、ストレージクラス(ストレージの種類)やリージョンによって異なりますが、基本的な計算式は同じで「保存している容量」と「転送量」に基づいて従量課金されます。

S3料金 = 保存量 + 転送量
保存量:データを保存している量による課金。
転送量:データをやりとりした転送量。

① 保存容量
 S3に保存した容量に対してかかる料金。ストレージクラスによって日割りの場合と、30日単位、90日単位、180日単位の場合など、計算方法は異なります。また、ストレージクラスによっては最小キャパシティー料金が設定されており、そのサイズに満たないファイルでも切り上げてその料金が請求されます。

② 転送量
 S3からファイルを取り出したり、命令を送ったりするときにかかる料金です。取得リクエスト(GET) や設定リクエスト(PUT)に対して、1GB単位で課金されます。

転送量を考える上で重要なのが「リクエスト」と「アップロード」、「ダウンロード」です。

・取得リクエスト(GET)とダウンロード
  取得のリクエスト(GET)とは「このファイルが欲しい」「このページがみたい」とサーバーに送る命令のことをいいます。
・設置リクエスト
 設置リクエスト(PUT)は、「このファイルを置きます」とサーバーにファイルを送る命令です。

S3の整合性モデル

 S3は高い可用性を実現するために、データの更新、削除には結果整合性モデルを採用している。同時書き込み時はタイムスタンプ処理を実施している。データを操作している途中は、データの矛盾が発生する可能性があります。

◯ データ処理:新規登録
整合性モデル:
  ・Consistency Read
  ・登録後即時にデータが反映される。
◯ データ処理:更新
整合性モデル:
  ・Eventual Consistency Read
  ・更新直後はデータ反映に時間がかかる。
◯ データ処理:削除
整合性モデル:
  ・Eventual Consistency Read
  ・削除直後はデータ反映に時間がかかる

S3アクセス管理

 S3のアクセス管理は用途に応じて方式を使い分ける。

◯ IAMポリシー
  ・IAMユーザー/サービスに対してS3サービスへのアクセス権限を設定することができる。
  ・一元的にユーザーへのアクセス権限を管理。

◯ バケットポリシー
  ・バケットへのアクセス権をJSONで設定。
  ・他アカウントの許可も可能。
  ・バケット単位の高度なアクセス管理向け。

◯ ACL
  ・バケットと個々のオブジェクトへのアクセス権限をXMLで設定する。
  ・他アカウントへの許可も可能。
  ・簡易的にアクセス管理向け。

◯ 署名付きURL
  ・AWS SDKで生成した署名付きURLでS3オブジェクトへの一時期間アクセスを許可。

S3は直接インターネット上からアクセスできるようになっていて、パブリックアクセスを許可することでアクセスできるようになっている。(デフォルトではオフになっている)

S3の暗号化

 S3のデータ保管時に暗号化形式として以下の4つの形式から選択する。

◯ SSE-S3
  ・S3の標準暗号化方式で簡易に利用可能。
  ・暗号化キーの作成、管理をS3側で自動で実施。
  ・ブロック暗号の一つである256ビットのAES-256を使用してデータを暗号化。

一番よく使用する方式で、S3側でデータを入れた後に暗号化をする。AES-256は、強固な暗号化の仕組みを使用して暗号化する。

◯ SSE-KMS
  ・AWS KMSに設定した暗号化キーを利用した暗号化を実施。
  ・ユーザー側でAWS KMSを利用して、暗号化キーを作成、管理することが可能。
  ・クライアント独自の暗号化キーを利用可能。

◯ SSE-C
  ・ユーザーが指定したキーによりサーバー側の暗号化(SSE-C)を使用することが可能。
  ・利用設定や管理が煩雑になるのがデメリット。

◯ クライアントサイド暗号化(CSE)
  ・クライアント側の暗号化では、S3に送信する前にデータを暗号化する方式。
  ・AWS KMSなどを利用して暗号化キーを作成、実施。
  ・アプリケーション内に保存したマスターキーを使用。

S3アクセスポイント

 S3上の共有データセットを使用するアプリケーションへの大規模なデータアクセス管理を実施。S3をアプリケーション上にセットアップして使っていきたい場合は、S3アクセスポイントを作成してそこに指定のアプリケーションからアクセスを許可する設定をして、アプリケーション上で許可範囲を設定してコントロールする。

作成手順
 ① アクセスポイントの作成
   ・アプリケーション向けにS3バケット内にアクセスするためのアクセスポイントを作成する。
 ② アクセス制限設定
   ・特定のIPアドレスやwebサーバーにアクセスを限定するアクセス制限を設定。
 ③ VPCアクセス制限設定
   ・VPCに対して特定のS3バケットへのアクセス制限を設定する。
 ④ アクセス管理の実行
   ・アプリケーション向けのアクセス対象を拡大、制限するなど、容易にコントロールが可能。

S3アクセスアナライザー

 アクセスポリシーに沿っているかを確認し、不正なアクセスが発生していないかアクセスポリシーを監視する機能。

・IAMアクセスアナライザーに連動したS3向けの機能。
・バケットポリシー/ACLのモニタリングしていく。
・パブリックまたは共有バケットアクセスを検出。
・バケットポリシー、バケットACL、またはその両方。バケットアクセスのリソースを検索して確認する場合は、この列の情報をまず使用して迅速で正確な是正処置を実行する。
・全てのパブリックバケットと共有バケットの結果を表示する。
・バケットの実際のアクセス状況を確認する。

ライフサイクル管理機能

 バケット内のオブジェクト単位でストレージクラスの変更や削除時期などを設定することで実行を自動化できる。これを使うことによって効率的なデータ保存が可能になる。

・一定期間で自動アーカイブ
 S3(Standard) → Glacier
・一定期間で自動で安価な保存場所へ移行
 S3(Standard) → S3(Standard-IA)
・一定期間で自動で削除
 S3(Standard) → 削除

レプリケーション

 S3はリージョンに設置して複数のAZに最初から冗長化されている。さらに別々のリージョンにバケットを作成して、そのバケットを通してレプリケーションすることができる。

 クロスリージョンレプリケーションは、異なるリージョンに作成したバケットに、オブジェクトを非同期でコピーします。コピー先のバケットの持ち主は同じである必要はありませんが、レプリケート作業を行うIAMロールは必要です。
 また、使用する双方のバケットは、バージョニングが有効になっている必要があります。同一リージョンのバケット同士の場合、レプリケーションは設定できません。

 クロスリージョンレプリケーションを使用すれば、海外にバックアップを取ることができるため、災害があってもデータを失うことがありません。
 しかし、海外にデータを置くことになるので国外に持ち出してはいけないデータを適用しないように気をつけないといけない。

バージョン管理

 ユーザーによる誤操作でデータを削除してしまってもバージョンを戻して復元することができます。
 00011のバージョンIDで、誤ってデータを削除しても、過去のバージョンID00010に消したデータが残っている場合は、バージョンID00011で消したデータWOバージョンID00010から復活することができる(バージョンを元に戻すことができる)

 ただし、データをたくさん更新していくと多くのバージョンができてしまうので、データの容量を食ってしまうデメリットもあるので、古くなったバージョンを定期ていに削除するライフサイクル管理の設定もしていく必要があります。

バックアップ

 基本はライフサイクル管理でGlacierにアーカイブしていくのが基本的なS3のアーカイブ方法になる。
 アーカイブに関しては、ライフサイクル管理によって定期的にデータをGlacierにアーカイブしてくのが通常で、リストアは、バージョン管理機能によって削除されたデータを復元するのが基本。

S3データ解析

 S3では、データ解析に関しするサービスをいくつか用意しています。

 S3 SelectとAmazon Athenaは、csvやjsonのような構成化されたテキスト形式のデータに対してSQLのselect文を実行するクエリ機能です。どちらもクエリを実行するためのサーバーは不要です。
 Amazon Redshit Spectrumも同じような機能ですが、大量のデータを処理することができるため、Redshiftクラスタが必要になります。

◯ S3 Select
  ・S3の機能で、保存されている1ファイルのデータに対してSQlを使用して集計や検索ができる機能になります。csvファイルやjsonのほか、ログなどで使われているApach Parquetフォーマットにも対応します。
  集計は、マネジメントコンソールからSQlを入力することで、簡単に実行できます。CLI(コマンドラインインターフェイス)やSDK(ソフトウェア開発キット)にも対応しており、複雑な集計をする時はプログラムから実行することもできる。

◯ Amazon AthenaとAmazon Redshift Spectrum
  ・Amazon AthenaとRedshift Spectrumは、データ分析サービスです。こちらもS3に格納されたデータをそのまま分析できます。
  S3 selectと違って、何を対象に、どのような検索をするのかを事前に構成する必要があります。その反面、複数ファイルを対象にすることもできます。
  この2つの大きな違いは、分析のためのサーバーを作成する必要があるかどうかです。
  Athenaは都度、必要に応じて分析用のサーバーを自動的に作成して実行されるので、実行したときだけ費用がかかりますが、それに対して、Redshift Spectrumは事前に分析用のサーバーを起動しておき、そのサーバーを使用して分析します。処理能力に応じてコストの低いサーバーから高いサーバーまで用意されており、かつ、分散処理でデータ分析ができます。

【特徴】
◯ S3 Select
  ・S3の内蔵機能として有している検索機能で、S3内で直接クエリを実行しデータを取得できる。
  ・csvやjsonに対して実行可能。

◯ Amazon Athena
  ・S3内のデータを直接、簡単に分析できるようにするインタラクティブなクエリサービス。
  ・Athena SQLクエリでSageMaker機械学習モデルを呼び出し、機械学習による推論も実行可能。

◯ Amazon Redshift Spectrum
  ・S3の格納データに対して、Amazon Redshiftから直接クエリを実行できる機能。
  ・Redshiftクラスターが起動されている前提であるため、Redshiftを利用している場合におすすめ。

◯ Amazon Macie
  ・機械学習によりS3に機密データを検出、分類、保護するフルマネージド型サービス。
  ・機密データ検出や調査を実施する。
  ・セキュリティが高い。

ファイルアップロード

 ファイルをクライアントからS3バケットへアップロードする際には様々な方法があります。

◯ APIやSDK
 ・APIやSDKを使用すると、サーバーパーティー製のツールを使ってファイル操作をできるようになります。使用にはIAMユーザーでアクセスキーとシークレットアクセスキーを発行し、利用したいツールに設定します。

◯ マルチパートアップロード
 ・マルチパートアップロードを利用すると、オブジェクトをパーツに分割し、1つのセットとしてアップロードすることができます。アップロード中はパーツとして表示されますが、全てのパーツがアップロードされると1つのオブジェクトになります。
 ・アップロードに失敗したパートは、再送されますが一時停止することもできます。一時停止の終了に期限はないので、一時停止した状態のまま放置してもアップロードが中断されることはありません。

◯ AWS Transfer for SFTP
 ・AWS Transfer for SFTPは、SFTPを使用してファイルを転送できるサービスです。これはSFTPツールではなく、SFTPサーバーを提供するサービスになります。
 ・SFTPサーバーエンドポイントを設置することで、サードパーティ製などのSFTPツールを使えるようになります。
 ・初期費用はかかりませんが、SFTPサーバーを使用している時間(プロビジョニングされている時間)と、データ転送量(アップロード及びダウンロード)に対して課金されます。

この記事が気に入ったらサポートをしてみませんか?