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) 保存時の暗号化
バージョニング オブジェクトの履歴管理

理論と実装の両面から学ぶなら関連書籍が参考になる。

関連用語