はじめに
こんにちは。rattsl(@rattsl)です。
今回はAWS S3についてハンズオンで色々いじったのでメモとして残します。
間違えて認識している部分があったらご指摘ください。
S3とは
マネージド型で提供されるのオブジェクト型ストレージサービス。
S3はシンプルストレージサービスの略。
- 1GBあたり約2.5円/月
- スケーラブルでデフォルトで冗長化されている
- 転送中、保存時は暗号化が可能
バケットという名の保存場所に保存され、バケット名はグローバルで一意である必要がある。
S3アクセスポイント
S3をアプリケーション上にセットアップした際、どのレイヤーのデータまでアクセスしていいかを管理する。
アプリケーションサーバーのIPアドレスを設定したり、VPCに対して特定のS3バケットへのアクセス制限を設定することでアクセス管理をコントロールすることが可能。
S3アクセスアナライザー
アクセスポリシーに沿ってアクセスされているかを確認し、不正なアクセスがないか監視する機能。
ライフサイクル管理
バケット内のオブジェクト単位でストレージクラスの変更や削除時期などを設定することで実行を自動化する。
レプリケーション
リージョン間を跨ぐクロスリージョンレプリケーションで耐障害性を高めこと。
バージョン管理
間違ってS3上のデータを削除してしまった際、バージョンから復旧できる。
デメリットとしてはデータの更新があるたびに新しいバージョンが作成されてしまい用量を食うので定期的に古いバージョンはライフサイクル管理で削除する必要がある。
バックアップ
- 基本的にはライフサイクル管理でGlacierにアーカイブを残すことで実現する。
- リストアはバージョン管理で削除されたデータを復元して実現する。
S3内データ検索、解析
S3内のデータ検索、解析は用途に応じて様々なサービスから実行できる。
分析サービス | 特徴 |
---|---|
S3 Select | S3にデフォルトの機能でS3内にクエリを実行し。データを取得できる。 |
Amazon Athena | S3内データに直接アクセスし、より高度で複雑なクエリを実行できるサービス |
Amazon Macie | 機械学習型クエリサービス |
Amazon RedShift Spectrum | S3に格納されているデータに対してAmazon RedShiftから直接クエリを実行できるサービス |
CORS(クロスオリジンリソースシェアリング)
異なるドメイン同士を共有化させる為の定義。
例えばEC2とS3を違ったWebホスティングサービスを利用しホスティングした際、URL(ドメイン名)が違ってくる。その異なるドメイン間のリソースのシェアをCORSが実現する。
バッチオペレーション
S3のでかいデータに対して一括処理を実行することが可能。バッチオペレーションはジョブとマニュフェストという単位で設定することができる。
ジョブ
- ジョブを作成することでバッチオペレーションを実行可能。
- S3バッチオペレーションにオブジェクトのリストを渡して、それぞれのオブジェクトに対して実行するアクションを指定する。
マニュフェスト
- ジョブを実行するオブジェクト
- マニュフェストオブジェクトキー、ETag、バージョンID(オプション)を指定
S3の用途
大量のデータを長期保存する目的で使う。主な役割としては以下
- コンテンツ配信・保管場所としての役割
- ログ・バッチの保管場所としての役割
- バックアップ/ディザスタリカバリとしての役割
- webの静的ホスティングとしての役割
- データレイクといった使い方としての役割
まとめ
Reactでビルドした静的資産をS3におくパターンがよくあるみたい。S3 + CroudFrontでCDN化もためしてみたいところ。