AWS S3勉強まとめ

・`ブロックストレージ`
EBS, インスタンスストア
→EC2にマウントして活用
→Block番号で管理

・`オブジェクトストレージ`
S3, Glacier
→安価かつ高い耐久性を持つオンラインストレージ
→オブジェクト、それに付随するメタデータ、そのオブジェクトにアクセスするためのユニークなIDで構成

・`ファイルストレージ`
EFS
→EC2から同時マウントできる共有ストレージサービス
→ファイルシステム

・S3特徴
→容量無制限、安価なストレージ（1GB3円）、データ容量に依存しない性能（RAIDやサーバー台数を考える必要なし）

・S3用途
①コンテンツ配信、保管サーバ
②ログ＆データハブストレージ
③バックアップやDR

`バケット`
オブジェクトの保存場所。デフォルト100個/1アカウントまで作成可能。名前はグローバルでユニークな必要あり。
`オブジェクト`
データ本体。URLが付与される
`キー`
オブジェクトの格納URL
`メタデータ`
オブジェクトに付随する属性情報。システム定義メタデータ、ユーザ定義メタデータあり
`リージョン`
バケットを配置するAWSのロケーション
`アクセスコントロールリスト（ACL）`
バケットやオブジェクトのアクセス管理

・ストレージクラス
`スタンダード`
`標準低頻度アクセスストレージ`：スタンダードに比べて安価だが、データの読出し容量に対して課金
`Glacier`：最も低コスト。データの取り出しにコストと時間
`低冗長化ストレージ`：Glacierから取り出したデータの置き場所として利用

>・`結果整合性（Eventual Consistency Readモデル）`
「更新はそのうち全体に反映される」
・`読み取り一貫性`
- あるトランザクションがデータを変更中のとき、ほかのトランザクションからは変更される前のデータを参照します。
- ほかのトランザクションからは変更前の確定されたデータを参照します。
- あるユーザーAが値をUPDATEしたとき、ユーザーBがそのデータを参照すると、戻ってくる値はUPDATE前の値となります。
- あるトランザクションで変更した確定前のデータをほかのトランザクションから参照することはできません。

>・パソコンのファイルシステムやデータベースと同じようにロックやトランザクション処理は行われない
参考URL：https://dev.classmethod.jp/cloud/amazon-s3-eventually-consistent-and-consistent-read/

・アクセス管理
①ユーザポリシー
→IAMuserに対して権限設定
②バケットポリシー
→バケットごとに権限設定。クロスアカウントで使用する際など
③ACL
→バケット、オブジェクトごとに指定可能（オブジェクトACLが優先）

・`署名付きURL`
AWS SDKで作成。S3のプライベートなオブジェクトに対して一定時間アクセスを許可

・Webサイトホスティング機能
静的なWebサイトをS3のみでホスティング可能
- バケット単位で指定
- 独自ドメインの設定→ドメイン名をバケット名として指定
- リダイレクト機能→任意のドメインにリダイレクト設定が可能
CloudFrontとの経由で配信することを推奨。バケットポリシーでHTTP/HTTPSリクエストのみを許可可能

・`VPCエンドポイント`
プライベートサブネットからNATゲートウェイなどを経由せずに直接S3とセキュアに通信可能
同一リージョンのみ

・`S3 support for IPv6`
追加費用なし
静的ウェブホスティングは使用不可

・暗号化
- サーバーサイド暗号化（サーバリソースを利用して格納データの暗号化）
- クライアントサイド暗号化（クライアント側で暗号化したデータをS3にアップロード）

・`クロスリージョンレプリケーション`
異なるリージョン間のS3バケットオブジェクトのレプリケーションを実施
→オブジェクトに対する動作を非同期でレプリケーション
→対象元バケットは`バージョニング`の機能を有効にする必要あり
※リージョン間データ転送費用が発生

・`バージョン管理機能`
誤操作による削除対策に有効
バケットに対して設定
任意のオブジェクトを参照可能
バージョニングのオブジェクト分も課金。保存期間も指定可能

・`ライプサイクル管理`
バケット内のオブジェクトに対して、ストレージクラスの変更や、削除処理の自動化
データ登録→Standard保存（一定期間過ぎたら削除）→Standard-IA移動（一定期間過ぎたら削除）→Glacierにアーカイブ（一定期間過ぎたら削除）

・アーカイブ
S3上のデータを削除でGlacier側のデータも削除
S3には8KBのオブジェクト名とメタデータのみ保管

・復元
オブジェクトごと
一時的にS3の低冗長化ストレージに指定日数複製（Glacierと低冗長化ストレージ両方課金）
復元にかかる時間の選択肢は3つ
①Expedited：緊急のアクセス
②Standard：3-5時間。標準的
③Bulk：大量のデータ。5-12時間
それぞれによってコストが異なる

・オブジェクト移動
Standard⇔Standard-IA→Glacier
        →Glacier

・`S3分析`
Standard-IAとGlacierどちらにいつ移動すればいいだろうかという疑問に答える可視化ツール
→ライフサイクルポリシーの設定値の参考になる

・`S3インベントリ`
S3のオブジェクトのリストを一気にcsvファイルで取得
スケジュールかも可能

・イベント通知
SNS：メール送信
SQS：キューメッセージの登録
Lambda：ファンクションの実行

・CloudWatchによる監視
`ストレージメトリクス`：バケット単位。1日単位でのレポート。追加費用なし
`リクエストメトリクス`：オブジェクト単位。通常のCloudWatch料金

・`CloudTrailによるAPI（操作ログ。Get, Delete, Putなど）管理`
S3への操作ログを収集
監査対象とは別のS3バケットの用意推奨

・`Logging`
バケットに対するアクセスログの出力設定可能

・`Tag管理`
バケット/オブジェクトに対してタグの指定可能

・パフォーマンスの最適化
大きなサイズのファイルをアップロード、ダウンロード
RANGE GETを活用。マルチパートアップロード機能
大量のGETリクエストが発生する場合はCloudFrontを併用することを推奨

・`Transfer Acceleration(高速ファイル転送サービス)`
AWSのエッジネットワークから最適化されたAWSのネットワークを経由する。
S3のデータ転送コストとは別に加算
※通常の転送より高速でない場合は、課金されない

・`コンテンツ配信サーバ`
データをS3に配置、CloudFrontでキャッシュさせる
CloudFrontで静的コンテンツ配信。CloudFrontの料金はかからない
Webサーバーで動的コンテンツは処理

・`ログ＆データハブストレージ`
オンプレ：Direct Connectでログデータ収集
外部データソース；Kinesisで収集
AWS；S3に保管。Glacierにアーカイブ
分析：Redshift, EMR, Atenaなど

・`バックアップ、DR`
クロスリージョンでデータの複製を保持
リージョン内でもDR設定

参考URL：https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-amazon-s3