Amazon Simple Storage Service(Amazon S3)は、スケーラブルでセキュアなオブジェクトストレージを提供するサービスです。Amazon S3 は、データレイク、モバイルアプリケーション、ウェブサイト、バックアップとリストア、エンタープライズアプリケーション、アーカイブ、ビッグデータ分析、IoT(モノのインターネット)デバイスなど、幅広いユースケースに対応しています。
このサービスを利用することで、顧客はビジネス要件やコンプライアンス要件に応じて、データへのアクセス方法を設定・最適化・整理できます。
本記事は、クラウドストレージに関する包括的なガイドシリーズの一部です。
Amazon S3 は、データを複数のリージョンに自動的にレプリケートし、最大限の耐久性と可用性を確保できます。この機能により、Amazon S3 は重要度の高いバックアップやデータのアーカイブ・保存に理想的なソリューションとなります。
さらに、Amazon S3 のバージョニング機能を利用することで、各ファイルの複数バージョンを保存できます。これにより、誤って削除・上書きされたファイルの復旧や、古いバージョンへのロールバックが容易になり、より高いレベルのデータ保護を実現します。
Amazon S3 には、S3 内に保存されたデータに対して直接クエリを実行できる in-placeクエリ機能 が備わっています。これにより、データを別の場所に移動することなく強力な分析を実行可能です。また、この機能は多くのサードパーティ製サービスとの統合をサポートしています。
Amazon S3 には、複数のストレージクラス階層が用意されており、その中には耐久性が高くコスト効率に優れたアーカイブソリューションである Amazon S3 Glacier も含まれます。通常の S3 ストレージに保存されたテラバイト規模のデータを Glacier に移動し、コンプライアンス目的で長期保存できます。
さらに、ライフサイクルポリシーを利用することで、アーカイブのプロセスを自動化できます。たとえば、「特定の期間が経過したらデータをアーカイブに移動する」といったルールを設定しておけば、システムが自動的に処理を実行します。
Amazon S3 には、PCI-DSS、FedRAMP、FISMA、HIPAA/HITECH、データ保護指令など、さまざまなセキュリティ基準やコンプライアンス要件に対応するための暗号化機能やポリシー管理機能が備わっています。
これらの機能はセキュリティおよび法令順守を満たすだけでなく、バケットポリシーを活用して重要なデータへのアクセスを制限することもできます。
Amazon S3 では、データファイルを「オブジェクト」として保存し、これらを「S3 バケット」に整理することができます。オブジェクトやバケットは Amazon S3 コンソールから管理可能です。
Amazon S3 オブジェクトは、データファイルとその関連メタデータで構成されます。オブジェクトとして保存できるファイルタイプに制限はありません。画像、ドキュメント、動画などあらゆる形式のファイルを保存できます。 1 回のアップロードで許可される最大ファイルサイズは 160 GB ですが、より大きなファイルを扱うためのツールも AWS が提供しています。オブジェクトは S3 に保存される基本単位であり、それぞれが一意のキー(キー名)を持ち、指定された S3 環境内で識別されます。
S3 のオブジェクトは、バケットと呼ばれるストレージコンテナに保存・整理されます。Amazon S3 API を利用すれば、複数のオブジェクトを一度に 1 つのバケットにアップロードすることも可能です。
各 AWS アカウントで作成できるバケットは最大 100 個に制限されていますが、必要に応じてサービス制限引き上げのリクエストをすることで追加作成が認められる場合があります。一方で、各バケット内に保存できるオブジェクトの数には制限はありません。
バケット作成時に考慮すべき事項
オブジェクトは転送しない限り、バケット作成時に指定したリージョン内に保存されます。新しいバケットを作成する際にリージョンを選択できるため、ユーザーに最も近いリージョンを選ぶことでコストを削減し、レイテンシーを低減できます。
Amazon S3 バケットの名前はグローバルで一意であり、同一リージョン内の他の AWS アカウントは同じ名前を利用できません。既存のバケットを削除することで、その名前が再び利用可能になる場合があります。
AWS では、Amazon S3 コンソールを使ってバケットやオブジェクトを管理できます。S3 コンソールは AWS マネジメントコンソールからアクセスでき、ブラウザベースのグラフィカルユーザーインターフェースを提供します。
S3 コンソールを利用すると、バケットの作成・設定・管理に加え、オブジェクトのアップロードやダウンロード、管理も可能です。また、論理的な階層構造を使ってストレージを整理できます。
この論理階層は、キーワードプレフィックスとデリミタを用いてフォルダ構造を形成します。各 S3 オブジェクトは、バケット名、キー、Web サービスエンドポイント、必要に応じてバージョン情報を組み合わせることで、一意に識別できるようになります。
Amazon S3 には、7 種類のストレージクラスが用意されています。
S3 Standard は、頻繁にアクセスされるデータ向けに低レイテンシーと高スループットを提供します。コンテンツ配信、動的ウェブサイト、ビッグデータワークロード、各種アプリケーションなど、幅広いユースケースに最適です。
S3 Intelligent-Tiering は、アクセス頻度が不明または変動するデータに最適です。このストレージクラスは、頻繁アクセス、低頻度アクセス(IA)、アーカイブ、ディープアーカイブの 4 種類のアクセス階層を提供します。Amazon S3 は顧客のアクセスパターンを分析し、最もコスト効率の高い階層へ自動的にデータを移動します。
低頻度アクセスながら迅速なアクセスを必要とするデータ向けです。ストレージコストが低く、長期保存、バックアップ、ディザスタリカバリ(DR)に理想的です。
S3 One Zone-IA は、必要に応じて迅速にアクセスできる低頻度データ向けのストレージクラスです。ただし、高い耐障害性や可用性は提供されないため、容易に再作成可能なデータや、他の場所にすでに保存されているデータに適しています。
S3 Glacier は、主にアーカイブ用途向けのストレージクラスです。長時間のデータ取得を許容することで、コスト効率の高い保存を実現します。データ取得時間は、数分から数時間の範囲で選択可能です。
年に 1~2 回程度しかアクセスしないデータ向けのクラスです。S3 の中で最も低価格のストレージを提供します。
S3 Outposts は、オンプレミスの AWS Outposts 環境に S3 の API とオブジェクトストレージ機能を追加するストレージクラスです。オンサイトアプリケーションの近くにデータを保持する必要がある場合や、特定のデータレジデンシー要件に対応する場合に利用されます。
AWS では、ライフサイクル管理ポリシーを活用してデータを整理し、適切なストレージクラスへ自動的に移行できます。これにより、ストレージコストを最適化するとともに、運用要件に応じた効率的なデータ管理が可能になります。
AWS では、オブジェクトをバケットに保存できます。以下は、バケットを作成し、その中にオブジェクトをアップロードする手順を示す簡単なチュートリアルです。
前提条件:有効な AWS アカウントを持っていること。
手順:
画像出典: AWS
画像出典: AWS
バケットを作成したら、オブジェクトのアップロードを開始できます。手順は以下の通りです。
手順:
画像出典: AWS
Amazon S3 は、プライマリデータやミッションクリティカルなデータの保存を目的に設計された、非常に堅牢なストレージインフラを提供します。オブジェクトは、1 つの AWS リージョン内にある複数の施設および複数のデバイスに冗長的に保存されます。
データの耐久性を維持するために、Amazon S3 の PUT および put object -copy 操作は、情報を複数のアベイラビリティーゾーンに同期的に保存します。オブジェクトが保存された後は、S3 が失われた冗長性を自動的に検出・修復し、耐久性を保持します。
Amazon S3 Standard ストレージが提供するデータ保護機能は以下のとおりです。
さらに、Amazon S3 は バージョニング によってデータを保護します。バージョニングを有効化すると、S3 バケットに保存されるすべてのオブジェクトの全バージョンを取得・復元・保持することができます。これにより、アプリケーション障害やユーザーの誤操作から迅速に復旧可能です。デフォルトでは直近に書き込まれたバージョンが返されますが、指定すれば過去のバージョンも取得できます。
Amazon S3 では、データ保護は保存データ(at rest)と転送データ(in transit)の両方に適用されます。
AWS PrivateLink for Amazon S3 を使用すると、VPC 内にインターフェース VPC エンドポイントをプロビジョニングできます。これにより、オンプレミスのアプリケーションから VPN や AWS Direct Connect を経由して、あるいは別リージョンから VPC ピアリングを通じて、S3 に直接アクセスできるようになります
デフォルトでは、Amazon S3 のすべてのリソース(オブジェクト、バケット、サブリソース ― たとえばウェブサイト設定やライフサイクル設定など)は非公開です。リソースの所有者、つまりリソースを作成した AWS アカウントのみがアクセス権を持ちます。所有者は、アクセス許可ポリシーを設定することで他のユーザーやアカウントにアクセス権を付与することも可能です。
Amazon S3 のアクセス制御ポリシーは、ユーザーポリシーとリソースベースポリシーの二種類に分類されます。リソースに直接関連付けて適用するポリシーはリソースベースポリシーと呼ばれます。
Amazon S3 からオブジェクトを取得したりアップロードしたりするアプリケーションを開発する際には、以下のガイドラインに従うことでパフォーマンスを向上させることができます。
EC2 インスタンスから S3 にアクセスする際は、CPU、ネットワークスループット、DRAM などのリソース要件に注意してください。必要に応じて、これらのリソース需要に合った別の Amazon EC2 インスタンスタイプを検討する価値があります。
また、DNS レイテンシーやルックアップ時間、HTTP 分析ツールを用いたデータ転送速度の確認も、S3 アクセスのパフォーマンス評価に有効です。
リクエストを複数の接続に分散することは、パフォーマンスを水平的にスケーリングする一般的な設計アプローチです。ハイパフォーマンスアプリケーションを開発する際は、Amazon S3 を従来型の単一ネットワークエンドポイントとして扱うのではなく、非常に大規模な分散システムとして設計することが推奨されます。
Amazon S3 に対して複数の同時リクエストを発行することで最適なパフォーマンスを実現できます。これらのリクエストを別々の接続に分散させることで、S3 から利用可能な帯域幅を最大限に活用可能です。なお、Amazon S3 では特定のバケットに対する接続数に上限は設けられていません。
S3 Transfer Acceleration を利用すると、S3 バケットとクライアント間で、広範な地理的距離を越えたファイル転送を高速かつセキュアに実行できます。Transfer Acceleration は、Amazon CloudFront のグローバル分散エッジロケーションを活用しています。
情報はエッジロケーションに到達した時点で最適化されたネットワーク経路を通じて Amazon S3 に転送されます。この機能は、大陸間でギガバイトからテラバイト規模のデータを移動する場合や、世界中の拠点から中央集約型のバケットにアップロードする場合に特に有効です。
さらに、Amazon S3 Transfer Acceleration Speed Comparison ツールを利用すれば、通常のアップロードとアクセラレーションを使用したアップロードを S3 リージョンごとに比較できます。このツールは、ブラウザから複数の Amazon S3 リージョンへのファイル転送速度をテストする際にマルチパートアップロードを使用します。
積極的なリトライとタイムアウト設定は、一貫したレイテンシーを維持するために有効です。Amazon S3 の大規模性を考慮すると、初回リクエストが遅延した場合でも、再試行リクエストは別の経路を通って成功する可能性が高くなります。
AWS SDK では、リトライ回数やタイムアウト値を設定できるオプションが提供されており、アプリケーションの許容範囲に応じて調整可能です。