S3
AWS のオブジェクトストレージサービスで、無制限のデータを高い耐久性で保存する
AWSインフラ
S3 とは
Amazon S3 (Simple Storage Service) は、オブジェクトストレージサービスで、無制限のデータを 99.999999999% (11 9's) の耐久性で保存する。静的サイトホスティング、データレイク、バックアップ、ログ保存に使われる。
基本概念
| 概念 | 説明 |
|---|---|
| バケット | オブジェクトのコンテナ (グローバルに一意な名前) |
| オブジェクト | ファイル + メタデータ (最大 5 TB) |
| キー | オブジェクトのパス (images/photo.jpg) |
| プレフィックス | フォルダのような階層 (images/) |
ストレージクラス
| クラス | 用途 | コスト |
|---|---|---|
| Standard | 頻繁にアクセス | 高い |
| Intelligent-Tiering | アクセスパターンが不明 | 自動最適化 |
| Standard-IA | 低頻度アクセス | 中程度 |
| Glacier Instant | アーカイブ (即座に取得) | 低い |
| Glacier Deep Archive | 長期アーカイブ | 最低 |
静的サイトホスティング
S3 (静的ファイル) → CloudFront (CDN + HTTPS) → ユーザー
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-site
OAC:
Type: AWS::CloudFront::OriginAccessControl
Properties:
OriginAccessControlConfig:
Name: my-oac
OriginAccessControlOriginType: s3
SigningBehavior: always
SigningProtocol: sigv4
S3 を直接公開せず、CloudFront の OAC 経由でのみアクセスさせる。
Presigned URL
import { GetObjectCommand, S3Client } from '@aws-sdk/client-s3';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
const url = await getSignedUrl(s3, new GetObjectCommand({
Bucket: 'my-bucket',
Key: 'private/document.pdf',
}), { expiresIn: 3600 }); // 1時間有効
一時的な URL を生成し、認証なしでオブジェクトにアクセスさせる。
イベント通知
Bucket:
Type: AWS::S3::Bucket
Properties:
NotificationConfiguration:
LambdaConfigurations:
- Event: s3:ObjectCreated:*
Function: !GetAtt ProcessImage.Arn
ファイルアップロード時に Lambda を自動起動する。
セキュリティ
| 設定 | 説明 |
|---|---|
| Block Public Access | パブリックアクセスを全面禁止 |
| バケットポリシー | アクセス制御 |
| 暗号化 (SSE-S3/SSE-KMS) | 保存時の暗号化 |
| バージョニング | オブジェクトの履歴管理 |
理論と実装の両面から学ぶなら関連書籍が参考になる。