用語集
2024/04/12
上田 裕大

AWSの基礎 〜Part3: ストレージサービス〜

AWSの主要サービス紹介第3回目の今回は、ストレージサービスについて紹介します。データの保存場所として使用するほか、EC2のボリュームとして使用することもあるサービスです。コンピューティングサービスと同様に、多くのユーザーが使用するサービスですので概要を確認しておきましょう。

はじめに

前回に引き続き、ストレージサービスについてご紹介します。今回はS3とEBS、EFSについてそれぞれのストレージの種類を合わせてご説明します。

ストレージの種類とサービスの対応

まず、ストレージの種類とサービスについて以下の表にまとめます。


注意点としてブロックストレージは、元々のデータの形成しているシステムに依存せず分割して保存します。

実際、PCのHDやSSDはファイルシステムを構築していますが、それぞれのデータをブロックにしてしまえば関係なくアドレスによってアクセスできます。ファイルシステムは存在しますが、ファイルストレージではなくブロックストレージですので注意してください。

ブロックストレージはブロック単位でアクセスでき、並列に処理をすることが可能なので高速なデータアクセスが可能です。一方で、ファイルストレージは構造が階層的なので複数のサーバによってデータを共有するのによく使用されます。オブジェクトストレージはオブジェクトという明確な単位があるので、データ複製やストレージ容量の増設が容易です。

S3 (Simple Storage Service)

概要
S3はAWSのストレージの中で最も安価なストレージサービスで、容量無制限かつスケールを自動で調節することの可能なオブジェクトストレージを提供するサービスです。S3はユーザーが指定した操作を行わなくとも、複数のAZに対して自動で複製が行われ、高い可用性を持ちます。この結果、S3はVPCやAZ単位ではなくリージョンごとに定義されるサービスの1つです。

S3はバケットという単位の中に、複数のオブジェクトとそのメタデータが含まれているほか、ディレクトリを作成することが可能であり、階層構造をとっています。それぞれのオブジェクトのURIは、https://(バケット名).s3.amazonaws.com/(バケット内のオブジェクトへのpath)の形で階層構造を直接使用してアクセスするため、同じ名前のバケットやバケット内の同じ「階層」に同じ名称のファイルを作成することはできませんし、全世界中で同じ名前のバケットも定義できません。

ストレージクラス
ここで全てを挙げることはしませんが、アクセス頻度の低いアーカイブのようなデータを保存する用のS3 Glacierや、複数のAZへの複製をせず1つのAZのみの利用にすることで、可用性を下げる代わりにコストを下げるS3 One Zone-Infrequent Access (S3 One Zone-IA)など、さまざまな種類があるので状況に応じて使い分けましょう。

アクセス制御
それぞれのバケットごとにアクセス制御を行うことが可能です。この制御はACLとバケットポリシー、パブリックアクセスブロックという3つで行います。デフォルトではパブリックアクセスブロックが有効になっているため、他のAWSアカウントのアクセスが必要な際には、ACLとバケットポリシーを設定した上でパブリックアクセスブロックを無効化します。

ACLはアクセス許可のみしか行うことができず、パブリックアクセスを有効化した上でのアクセスブロックはバケットポリシーでしかできないことに注意しましょう。


{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::YOUR-BUCKET-NAME/*"
}
]
}



  • ・ Version: ポリシー言語のバージョン。”2012-10-17″は2024年4月現在推奨されているバージョンです。

  • ・ Statement: ポリシーの実際の文です。

  • ・ Sid: ステートメントのIDで、ポリシー内で一意である必要があります。

  • ・ Effect: “Allow”(許可)または”Deny”(拒否)のいずれかを指定します。

  • ・ Principal: ポリシーが適用される主体を指定します。"*"はすべてのユーザーを意味します。

  • ・ Action: 実行許可または拒否の対象となるアクション。この例ではs3:GetObjectはオブジェクトの読み取りを意味します。

  • ・ Resource: ポリシーが適用されるリソース。YOUR-BUCKET-NAMEはバケット名に置き換えてください。



署名付きURL
S3バケットにアクセスするもう1つの方法として署名付きURLによるアクセスがあります。これはAWS CLIやSDKを使って発行することができ有効期限を設けることができるので、IAMユーザーやアクセスキーを使用しない一時的なアクセスを安全かつ簡単に行うことが可能です。

バージョニング
有効化することで過去の状態に復元することや削除したものを復元できるようになります。一方で、過去バージョンを保持することになるのでコストが高くなります。

静的ホスティング機能
常にリクエストによらず同じレスポンスを返すようなwebサービスを静的webホスティングと呼びます。このホストをS3バケットを使って実装することが可能です。やり方も単純で静的webホスティングという設定を有効化するだけです。

EBS (Elastic Block Storage)

EC2向けのブロックストレージサービスです。同じAZ内のEC2インスタンスにアタッチすることが可能で、その性能ごとに複数の種類から選択可能です。

EBSの種類やサイズの変更はEC2にアタッチした状態で行うことも可能で、追加の設定を行うことでEBSのスナップショットがS3に増分バックアップの形で保存されます。通常は同じリージョン内のS3に保存されますが、別のリージョンや別のAWSアカウントのS3に複製することも可能です。

EFS (Elastic File Storage)

EFSはVPC内に作成され、同じVPC内に設置されたマウントターゲットを経由してアクセスします。

これにより柔軟にリソースサイズの変更が可能になっているほか、VPCの存在している複数のAZ内にデータが複製されるため可用性を高くすることが可能となっています。

終わりに

今回は2回にわたってAWSの環境に、サーバを設置するための方法をご紹介しました。次回はデータベース用のサービスについて紹介します。

New call-to-action