AWSに戻る

Amazon S3 (Simple Storage Service)

Amazon S3とは

Amazon Simple Storage Service (Amazon S3) は、業界をリードするスケーラビリティ、データ可用性、セキュリティ、およびパフォーマンスを提供するオブジェクトストレージサービスです。S3を使用すると、あらゆる量のデータを保存および保護し、データレイク、ウェブサイト、モバイルアプリケーション、バックアップと復元、アーカイブ、エンタープライズアプリケーション、IoTデバイス、ビッグデータ分析など、幅広いユースケースをサポートできます。S3は使いやすいマネジメントコンソール、RESTful APIとSDKを提供し、99.999999999%(11個の9)のデータ耐久性を実現するように設計されています。

Amazon S3の主な特徴

Amazon S3の基本概念

Amazon S3の基本的な概念は以下の通りです:

概念 説明
バケット S3に保存されるオブジェクトのコンテナ。バケット名はグローバルに一意である必要がある
オブジェクト S3に保存される基本エンティティ。オブジェクトはデータとメタデータで構成される
キー バケット内のオブジェクトの一意の識別子
バージョニング 同じオブジェクトの複数のバージョンを保持する機能
ライフサイクル管理 オブジェクトの自動移行や削除のルールを定義する機能
ストレージクラス アクセス頻度やコスト要件に基づいて選択できるストレージの種類
アクセスポイント 共有データセットへのアクセスを管理するための専用アクセスポリシー

S3のネーミングルール

S3バケット名には以下のルールがあります:

Amazon 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に保存されるオブジェクトストレージ 低レイテンシーが必要なオンプレミスアプリケーション、ローカルデータ処理

Amazon S3の使用方法

S3は、AWS Management Console、AWS CLI、AWS SDKs、またはRESTful APIを使用して利用できます。

バケットの作成と管理

AWS CLIを使用したバケットの作成

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

S3 Selectを使用したデータのクエリ

S3 Selectを使用したCSVファイルのクエリ

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

Amazon S3のセキュリティ

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
        }
      }
    }'

監視とログ記録

S3アクセスログの有効化

aws s3api put-bucket-logging \
    --bucket my-bucket \
    --bucket-logging-status '{
      "LoggingEnabled": {
        "TargetBucket": "log-bucket",
        "TargetPrefix": "my-bucket-logs/"
      }
    }'

Amazon S3の高度な機能

クロスリージョンレプリケーション(CRR)

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バッチオペレーションは、大量の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アクセスポイント

S3アクセスポイントは、S3バケット内の共有データセットへのアクセスを管理するための専用アクセスポリシーを持つ名前付きネットワークエンドポイントです。

アクセスポイントの作成

aws s3control create-access-point \
    --account-id 123456789012 \
    --name my-access-point \
    --bucket my-bucket

S3マルチリージョンアクセスポイント

マルチリージョンアクセスポイントは、複数のAWSリージョンにまたがるS3バケットへのグローバルエンドポイントを提供します。アプリケーションは単一のエンドポイントを使用して、最も低いレイテンシーを持つリージョンからデータにアクセスできます。

Amazon 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
        }
      ]
    }'

Amazon S3のコスト最適化

S3のコストを最適化するための戦略:

Amazon S3のユースケース

S3は以下のようなユースケースに適しています:

Amazon 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データ内の機密情報の検出と保護

CloudFrontとの統合例

S3バケットをオリジンとするCloudFrontディストリビューションの作成

aws cloudfront create-distribution \
    --origin-domain-name my-bucket.s3.amazonaws.com \
    --default-root-object index.html

Amazon S3のベストプラクティス

S3のセキュリティチェックリスト

S3バケットのセキュリティを確保するためのチェックリスト:

まとめ

Amazon S3は、業界をリードするスケーラビリティ、データ可用性、セキュリティ、およびパフォーマンスを提供するオブジェクトストレージサービスです。様々なストレージクラス、強力なセキュリティ機能、柔軟なデータ管理機能を備え、幅広いユースケースに対応します。

S3の主な利点は以下の通りです:

S3を効果的に活用するには、適切なストレージクラスの選択、セキュリティベストプラクティスの適用、パフォーマンス最適化戦略の実装、コスト管理の最適化が重要です。また、他のAWSサービスと組み合わせることで、より強力で柔軟なクラウドソリューションを構築することができます。