AWS学習履歴の趣旨
AWSでデプロイをしたことはあるものの、AWSの理解に足りない部分があるのが悔しいと思い、UdemyのAWS講座で勉強を開始しました。
以下の記事の続きです。
学習内容を全て残すことは量が莫大になるので無理ですが、『重要かな?と思った部分を記録として残そう!』というのが趣旨です。
更新頻度は不定期ですが、地道に続けていこうかと思います。
応援よろしくお願いします。
S3
"Simple Storage Service"が正式名称です。(Sが3つで"S3")
オブジェクトストレージで、AWSではS3やGlacier(S3より安いもの、長期データ保管用のストレージ)があります。(インスタンスストアやEBSはブロックストレージです)
ユーザーがデータを容量制限なく保存可能で
- 高い耐久性
- 安価(約3円/(月・GB))
- AWS側で性能が保証
- 暗号化も可能
保存場所はバケットという単位で決めることができます。このバケットの名前は世界中で一意である必要があります。
バケット内に格納されるファイルはオブジェクトと呼ばれ、バケット内でのオブジェクト数は無制限です。一つのオブジェクトのデータサイズは0KB〜5TBまでと、大きなデータも保管できます。
オブジェクト
オブジェクトの構成要素
要素 | 説明 |
---|---|
key | オブジェクトの名前。バケット内でのオブジェクトの識別子 |
value | データそのもの |
version ID | バージョン管理(後述)に使用 |
メタデータ | オブジェクトに付随する情報 |
サブリソース | バケット構成情報を保存・管理するためのサポート |
バージョン管理
バージョン管理を有効化すると、バージョン毎にデータが残ります。最新バージョンのデータがオブジェクトとして適用されます。
バージョン管理を有効化しておくと、オブジェクトを削除した際にも、削除バージョンが残ります(これが適用されるのでオブジェクトが削除された状態になる)。この削除バージョンデータを削除すれば、データの復元が可能です。
バージョン管理をすることで、削除時のバックアップや、特定タイミングのデータ状態に戻すことも可能です。
S3の整合性モデル
同時にデータ処理を行った時に、どのようにデータの整合性をとるかが、新規登録・更新・削除で決まっています。
データ処理 | モデル |
---|---|
新規登録 | consistency read:登録後即時にデータ反映 |
更新 | eventual consistency read:更新直後はデータ反映に時間がかかる |
削除 | eventual consistency read:削除直後はデータ反映に時間がかかる |
更新と削除では、結果が合えばいいという、結果整合性モデルを採用しているため、処理反映に時間がかかります。
アクセス管理
- IAMポリシー・ロールでの管理
- バケットポリシー:バケット毎にアクセス権限を設定
- ACL:バケットとオブジェクトへのアクセス権限を設定(バケットポリシーより細かく設定できる)
- 署名付URL:AWS SDKで生成した著名付URLでオブジェクトへの一定時間アクセスを許可
レプリケーション
リージョン間をまたいで(クロスリージョン)、バケット(内のオブジェクト)の複製を作成可能です。
複製のトリガーは、バケットに対するオブジェクトの作成・更新・削除となっており、指定したバケットでこれら処理が行われると、複製が行われます。
※バージョニング機能の有効化が必要です
※複製バケットは別リージョンを指定します
※双方向レプリケーションも可能です
※データの転送には費用がかかります
バックアップ
Glacierを使ってバックアップ・復元が可能です。
S3からGlacierへバックアップをとり、S3内のデータを削除すると、Glacier内の該当のデータを削除されます。
復元がオブジェクト単位でも可能です。
AWS CLI
インスタンスに接続していなくとも、コマンドラインからAWSサービスを制御・管理できます。
インスタンスにssh接続しなければ使えなかったコマンドが、ターミナルのどこでも使うことができるようになります。
AWS CLIを用いるには、IAMユーザーによる設定が必要です。
- ユーザー追加時に、アクセス権限で「プログラムによるアクセス」を有効化する
- ユーザーの認証情報タブから「アクセスキーの作成」を実行
- ターミナルでキーを設定する($ aws configureと打ち込むと、順にアクセスキー→シークレットアクセスキー→デフォルトのリージョン→デフォルトの出力形式の入力を求められます。こちらで、作成したキー情報、リージョン情報、データ形式(JSONなど)を設定してください)
ここで設定すれば、インスタンスに接続していなくとも、例えば以下のようなコマンドが使用できます。
$ aws s3 ls #S3のバケット一覧を表示 $ aws s3 mb s3://バケット名 #新規にバケットを作成(リージョンは設定したデフォルトのリージョンが適用されます) $ aws s3 rb s3://バケット名 #指定したバケットを削除 #レプリケーション実行 $ aws s3 cp --recursive s3://レプリケーションしたいバケット名 s3://レプリケーション先のバケット名 ※エラーが出る場合は、"$ set tz=jst"とタイムゾーンの設定を行なってください)
これ以外にも多くのコマンドが使えるので、以下のマニュアルを参照してみてください。
静的ホスティング(Static website hosting)
S3だけで静的なwebページを作成することができます。
バケット作成時に、パブリックアクセス設定を全て許可し、プロパティで静的ホスティングの設定、バケットポリシーを設定してインターネットからアクセスできるようにする必要があります。
S3の外部接続
AWS Storage Gateway
オンプレ環境とAWSのストレージサービスを接続することが可能です。なので、オンプレのバックアップをS3でとったりなど、オンプレ側からAWSの有する機能・性能を活用できます。
種類 | 説明 |
---|---|
ファイルゲートウェイ | オンプレのファイルデータをゲートウェイ経由でS3オブジェクトとして格納 |
ボリュームゲートウェイ | オンプレのディスクデータをゲートウェイ経由でSnapshotとしてS3に取得し、災害時対策として使用可能(AWS上でEBSへの復元も可能) |
テープゲートウェイ | 長期保存する際にテープを使用することがあるが、それを仮想テープライブラリとして提供。Glacierに格納される |
S3 Transfer Accelaration
クライアントとS3バケット間で長距離でもファイル転送を高速で行える。
Snowball
物理的にオンプレ環境をS3に移行することも可能です。AWSから借りられる機器を用いて、直接AWSのデータセンターでデータの移行を行えるサービスです。