未経験からのフルスタックエンジニア

スキルをつけよう!未経験からフリーランスエンジニアへの成長記録

AWS 学習履歴(3)~S3~

AWS学習履歴の趣旨

AWSでデプロイをしたことはあるものの、AWSの理解に足りない部分があるのが悔しいと思い、UdemyのAWS講座で勉強を開始しました。

以下の記事の続きです。

atora1992.hatenablog.com

学習内容を全て残すことは量が莫大になるので無理ですが、『重要かな?と思った部分を記録として残そう!』というのが趣旨です。

更新頻度は不定期ですが、地道に続けていこうかと思います。

応援よろしくお願いします。

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サービスを制御・管理できます。

aws.amazon.com

インスタンスssh接続しなければ使えなかったコマンドが、ターミナルのどこでも使うことができるようになります。

AWS CLIを用いるには、IAMユーザーによる設定が必要です。

  1. ユーザー追加時に、アクセス権限で「プログラムによるアクセス」を有効化する
  2. ユーザーの認証情報タブから「アクセスキーの作成」を実行
  3. ターミナルでキーを設定する($ aws configureと打ち込むと、順にアクセスキー→シークレットアクセスキー→デフォルトのリージョン→デフォルトの出力形式の入力を求められます。こちらで、作成したキー情報、リージョン情報、データ形式JSONなど)を設定してください)

ここで設定すれば、インスタンスに接続していなくとも、例えば以下のようなコマンドが使用できます。

$ aws s3 ls  #S3のバケット一覧を表示
$ aws s3 mb s3://バケット名  #新規にバケットを作成(リージョンは設定したデフォルトのリージョンが適用されます)
$ aws s3 rb s3://バケット名  #指定したバケットを削除

#レプリケーション実行
$ aws s3 cp --recursive s3://レプリケーションしたいバケット名 s3://レプリケーション先のバケット名
※エラーが出る場合は、"$ set tz=jst"とタイムゾーンの設定を行なってください)

これ以外にも多くのコマンドが使えるので、以下のマニュアルを参照してみてください。

docs.aws.amazon.com

静的ホスティング(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のデータセンターでデータの移行を行えるサービスです。