Amazon Simple Storage Service (Amazon S3) は、業界をリードするスケーラビリティ、データ可用性、セキュリティ、およびパフォーマンスを提供するオブジェクトストレージサービスです。S3を使用すると、あらゆる量のデータを保存および保護し、データレイク、ウェブサイト、モバイルアプリケーション、バックアップと復元、アーカイブ、エンタープライズアプリケーション、IoTデバイス、ビッグデータ分析など、幅広いユースケースをサポートできます。S3は使いやすいマネジメントコンソール、RESTful APIとSDKを提供し、99.999999999%(11個の9)のデータ耐久性を実現するように設計されています。
Amazon S3の基本的な概念は以下の通りです:
概念 | 説明 |
---|---|
バケット | S3に保存されるオブジェクトのコンテナ。バケット名はグローバルに一意である必要がある |
オブジェクト | S3に保存される基本エンティティ。オブジェクトはデータとメタデータで構成される |
キー | バケット内のオブジェクトの一意の識別子 |
バージョニング | 同じオブジェクトの複数のバージョンを保持する機能 |
ライフサイクル管理 | オブジェクトの自動移行や削除のルールを定義する機能 |
ストレージクラス | アクセス頻度やコスト要件に基づいて選択できるストレージの種類 |
アクセスポイント | 共有データセットへのアクセスを管理するための専用アクセスポリシー |
S3バケット名には以下のルールがあります:
S3は様々なユースケースに対応するために複数のストレージクラスを提供しています:
ストレージクラス | 説明 | ユースケース |
---|---|---|
S3 Standard | 高い耐久性、可用性、パフォーマンスを提供する汎用ストレージ | 頻繁にアクセスされるデータ、ウェブサイト、コンテンツ配信、データ分析 |
S3 Intelligent-Tiering | アクセスパターンに基づいて自動的にストレージクラスを最適化 | アクセスパターンが不明または変化するデータ |
S3 Standard-IA | 標準よりも低コストだが、取り出し料金が発生する低頻度アクセス用ストレージ | バックアップ、長期ストレージ、災害復旧ファイル |
S3 One Zone-IA | 単一のアベイラビリティゾーンに保存される低コストの低頻度アクセス用ストレージ | 再作成可能な低頻度アクセスデータ、セカンダリバックアップコピー |
S3 Glacier | 長期アーカイブ用の低コストストレージ、取り出しに数分から数時間かかる | 長期データアーカイブ、バックアップ、コンプライアンスアーカイブ |
S3 Glacier Deep Archive | 最も低コストのストレージクラス、取り出しに12時間かかる | 長期データ保持と保存、デジタル保存、規制コンプライアンスアーカイブ |
S3 Outposts | オンプレミス環境のAWS Outpostsに保存されるオブジェクトストレージ | 低レイテンシーが必要なオンプレミスアプリケーション、ローカルデータ処理 |
S3は、AWS Management Console、AWS CLI、AWS SDKs、またはRESTful APIを使用して利用できます。
aws s3 mb s3://my-bucket
aws s3api put-bucket-versioning \
--bucket my-bucket \
--versioning-configuration Status=Enabled
aws s3api put-bucket-lifecycle-configuration \
--bucket my-bucket \
--lifecycle-configuration file://lifecycle.json
lifecycle.jsonの例:
{
"Rules": [
{
"ID": "Move to IA after 30 days, archive after 90 days, delete after 365 days",
"Status": "Enabled",
"Prefix": "documents/",
"Transitions": [
{
"Days": 30,
"StorageClass": "STANDARD_IA"
},
{
"Days": 90,
"StorageClass": "GLACIER"
}
],
"Expiration": {
"Days": 365
}
}
]
}
aws s3 cp myfile.txt s3://my-bucket/
aws s3 cp myfile.txt s3://my-bucket/ --sse AES256
aws s3 cp s3://my-bucket/myfile.txt .
aws s3 rm s3://my-bucket/myfile.txt
aws s3 ls s3://my-bucket/
aws s3api put-bucket-policy \
--bucket my-bucket \
--policy file://policy.json
policy.jsonの例(パブリック読み取りアクセスを許可):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
aws s3 website s3://my-bucket/ \
--index-document index.html \
--error-document error.html
aws s3 sync ./website/ s3://my-bucket/ --acl public-read
aws s3api select-object-content \
--bucket my-bucket \
--key data.csv \
--expression "SELECT * FROM s3object s WHERE s.\"Name\" = 'John'" \
--expression-type 'SQL' \
--input-serialization '{"CSV": {"FileHeaderInfo": "USE", "FieldDelimiter": ","}}' \
--output-serialization '{"CSV": {}}' \
output.csv
S3は、データを保護するための多層防御アプローチを提供します:
aws s3api put-public-access-block \
--bucket my-bucket \
--public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
aws s3api put-bucket-encryption \
--bucket my-bucket \
--server-side-encryption-configuration '{
"Rules": [
{
"ApplyServerSideEncryptionByDefault": {
"SSEAlgorithm": "AES256"
}
}
]
}'
aws s3api put-object-lock-configuration \
--bucket my-bucket \
--object-lock-configuration '{
"ObjectLockEnabled": "Enabled",
"Rule": {
"DefaultRetention": {
"Mode": "COMPLIANCE",
"Days": 30
}
}
}'
aws s3api put-bucket-logging \
--bucket my-bucket \
--bucket-logging-status '{
"LoggingEnabled": {
"TargetBucket": "log-bucket",
"TargetPrefix": "my-bucket-logs/"
}
}'
CRRは、異なるAWSリージョン間でS3オブジェクトを自動的に非同期でコピーする機能です。これにより、コンプライアンス要件を満たし、レイテンシーを最小化し、運用効率を向上させることができます。
aws s3api put-bucket-replication \
--bucket my-bucket \
--replication-configuration '{
"Role": "arn:aws:iam::123456789012:role/s3-replication-role",
"Rules": [
{
"Status": "Enabled",
"Priority": 1,
"DeleteMarkerReplication": { "Status": "Disabled" },
"Filter": {
"Prefix": ""
},
"Destination": {
"Bucket": "arn:aws:s3:::destination-bucket",
"StorageClass": "STANDARD"
}
}
]
}'
S3バッチオペレーションは、大量のS3オブジェクトに対して一括操作を実行するための機能です。コピー、タグ付け、アクセス制御リストの設定など、様々な操作を実行できます。
aws s3control create-job \
--account-id 123456789012 \
--operation '{
"S3PutObjectTagging": {
"TagSet": [
{
"Key": "status",
"Value": "archived"
}
]
}
}' \
--report '{
"Bucket": "arn:aws:s3:::job-report-bucket",
"Format": "Report_CSV_20180820",
"Enabled": true,
"Prefix": "reports/",
"ReportScope": "AllTasks"
}' \
--manifest '{
"Spec": {
"Format": "S3BatchOperations_CSV_20180820",
"Fields": ["Bucket", "Key"]
},
"Location": {
"ObjectArn": "arn:aws:s3:::manifest-bucket/manifest.csv",
"ETag": "etagvalue"
}
}' \
--priority 10 \
--role-arn arn:aws:iam::123456789012:role/batch-operations-role
S3オブジェクトラムダは、S3からデータを取得するときにオンデマンドでオブジェクトを変換するための機能です。画像のリサイズ、ファイル形式の変換、データのリダクションなどを行うことができます。
S3アクセスポイントは、S3バケット内の共有データセットへのアクセスを管理するための専用アクセスポリシーを持つ名前付きネットワークエンドポイントです。
aws s3control create-access-point \
--account-id 123456789012 \
--name my-access-point \
--bucket my-bucket
マルチリージョンアクセスポイントは、複数のAWSリージョンにまたがるS3バケットへのグローバルエンドポイントを提供します。アプリケーションは単一のエンドポイントを使用して、最も低いレイテンシーを持つリージョンからデータにアクセスできます。
S3のパフォーマンスを最適化するためのベストプラクティス:
# マルチパートアップロードの開始
aws s3api create-multipart-upload \
--bucket my-bucket \
--key largefile.dat
# パートのアップロード
aws s3api upload-part \
--bucket my-bucket \
--key largefile.dat \
--part-number 1 \
--body part1.dat \
--upload-id upload-id
# マルチパートアップロードの完了
aws s3api complete-multipart-upload \
--bucket my-bucket \
--key largefile.dat \
--upload-id upload-id \
--multipart-upload '{
"Parts": [
{
"ETag": "etag1",
"PartNumber": 1
},
{
"ETag": "etag2",
"PartNumber": 2
}
]
}'
S3のコストを最適化するための戦略:
S3は以下のようなユースケースに適しています:
S3は他のAWSサービスと統合して、より強力なソリューションを構築できます:
サービス | 統合の利点 |
---|---|
Amazon CloudFront | S3コンテンツのグローバル配信と低レイテンシーアクセス |
AWS Lambda | S3イベントに応じてコードを実行 |
Amazon Athena | S3データに対するサーバーレスSQLクエリ |
Amazon EMR | S3データに対する大規模データ処理 |
AWS Glue | S3データのETL(抽出、変換、ロード)処理 |
Amazon Redshift | S3データに対するデータウェアハウスクエリ |
AWS Backup | S3データの一元管理されたバックアップ |
Amazon Macie | S3データ内の機密情報の検出と保護 |
aws cloudfront create-distribution \
--origin-domain-name my-bucket.s3.amazonaws.com \
--default-root-object index.html
S3バケットのセキュリティを確保するためのチェックリスト:
Amazon S3は、業界をリードするスケーラビリティ、データ可用性、セキュリティ、およびパフォーマンスを提供するオブジェクトストレージサービスです。様々なストレージクラス、強力なセキュリティ機能、柔軟なデータ管理機能を備え、幅広いユースケースに対応します。
S3の主な利点は以下の通りです:
S3を効果的に活用するには、適切なストレージクラスの選択、セキュリティベストプラクティスの適用、パフォーマンス最適化戦略の実装、コスト管理の最適化が重要です。また、他のAWSサービスと組み合わせることで、より強力で柔軟なクラウドソリューションを構築することができます。