Closed7

S3レプリケーション

dehio3dehio3

クロスアカウントでのレプリケーション

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/replication-walkthrough-2.html

https://studist.tech/s3-replication-cross-account-a0afb7a45056

流れ

レプリケーション元バケット

バケットでのバージョニングを有効化する

aws s3api put-bucket-versioning \
--bucket source \
--versioning-configuration Status=Enabled \
--profile acctA

オブジェクトをレプリケートするための Simple Storage Service (Amazon S3) 許可を付与する IAM ロールを作成する

aws iam create-role --role-name S3ReplicationRole --profile acctA --assume-role-policy-document '{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"s3.amazonaws.com"
         },
         "Action":"sts:AssumeRole"
      }
   ]
}'
aws iam put-role-policy --role-name S3ReplicationRole --profile acctA --policy-name S3ReplicationPolicy --policy-document '{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:GetObjectVersionForReplication",
            "s3:GetObjectVersionAcl",
            "s3:GetObjectVersionTagging"
         ],
         "Resource":[
            "arn:aws:s3:::source-bucket/*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListBucket",
            "s3:GetReplicationConfiguration"
         ],
         "Resource":[
            "arn:aws:s3:::source-bucket"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ReplicateObject",
            "s3:ReplicateDelete",
            "s3:ReplicateTags"
         ],
         "Resource":"arn:aws:s3:::destination-bucket/*"
      }
   ]
}'

レプリケート元バケットにレプリケーション設定を追加する

replication.json
{
  "Role": "IAM-role-ARN",
  "Rules": [
    {
      "Status": "Enabled",
      "Priority": 1,
      "DeleteMarkerReplication": { "Status": "Disabled" },
      "Filter" : { "Prefix": "Tax"},
      "Destination": {
        "Bucket": "arn:aws:s3:::destination-bucket"
      }
    }
  ]
}
aws s3api put-bucket-replication \
--replication-configuration file://replication.json \
--bucket source \
--profile acctA

レプリケーション先バケット

バケットでのバージョニングを有効化する

aws s3api put-bucket-versioning \
--bucket destination \
--versioning-configuration Status=Enabled \
--profile acctA

オブジェクトをレプリケートするための Simple Storage Service (Amazon S3) 許可を付与する IAM ロールを作成する

レプリケート先バケットにバケットポリシー設定を追加する

{
   "Version":"2012-10-17",
   "Id":"",
   "Statement":[
      {
         "Sid":"Set-permissions-for-objects",
         "Effect":"Allow",
         "Principal":{
            "AWS":"arn:aws:iam::source-bucket-acct-ID:role/service-role/source-acct-IAM-role"
         },
         "Action":["s3:ReplicateObject", "s3:ReplicateDelete"],
         "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      },
      {
         "Sid":"Set permissions on bucket",
         "Effect":"Allow",
         "Principal":{
            "AWS":"arn:aws:iam::source-bucket-acct-ID:role/service-role/source-acct-IAM-role"
         },
         "Action":["s3:List*", "s3:GetBucketVersioning", "s3:PutBucketVersioning"],
         "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      }
   ]
}
dehio3dehio3

既存オブジェクトのレプリケーション

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/s3-batch-replication-batch.html

バケットで S3 ライフサイクルが設定されている場合は、バッチレプリケーションジョブがアクティブな際には、ライフサイクルルールを無効にすることをお勧めします。これにより、レプリケート元バケットとレプリケート先バケットの間で等価性が確保されます。これを行わない場合、これらのバケットが分岐し、レプリケート先バケットがレプリケート元バケットの完全なレプリカではなくなる可能性があります。
バッチオペレーションは、S3 Glacier Flexible Retrieval ストレージクラスと S3 Glacier Deep Archive ストレージクラスに保存されたオブジェクトに対してはサポートされていません。
アーカイブアクセスまたはディープアーカイブアクセスのストレージ階層に保存されている S3 Intelligent-Tiering オブジェクトのバッチレプリケーションを行うには、まず復元リクエストを開始し、オブジェクトが高頻度アクセス階層に移動されるまで待つ必要があります。

https://aws.amazon.com/jp/getting-started/hands-on/replicate-existing-objects-with-amazon-s3-batch-replication/?ref=docs_gateway/amazons3/s3-batch-replication-batch.html

dehio3dehio3

料金

https://aws.amazon.com/jp/s3/pricing/#Replication_pricing

  • 宛先として選択した S3 ストレージクラスのストレージの S3 料金
  • プライマリコピーのストレージの料金
  • レプリケーション PUT リクエストの料金
    • 0.0047USD/1,000 リクエスト
  • 該当する低頻度アクセスストレージの取得料金
  • S3 バッチオペレーションの料金
    • ジョブあたり 0.25USD
    • 処理された 100 万オブジェクトあたり 1.00USD

https://aws.amazon.com/jp/s3/faqs/#Replication

データ転送料金は、S3 クロスリージョンレプリケーション (S3 CRR) と S3 Replication 時間制御 (S3 RTC) にのみ適用され、S3 セイムリージョンレプリケーション (S3 SRR) にはデータ転送料金はかかりません。

dehio3dehio3

Intelligent-Tiering Archive Access層のオブジェクトが、バッチレプリケーションの対象オブジェクト一覧に含まれていない

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/s3-batch-replication-batch.html#batch-replication-considerations

バッチオペレーションは、S3 Glacier Flexible Retrieval ストレージクラスと S3 Glacier Deep Archive ストレージクラスに保存されたオブジェクトに対してはサポートされていません。
アーカイブアクセスまたはディープアーカイブアクセスのストレージ階層に保存されている S3 Intelligent-Tiering オブジェクトのバッチレプリケーションを行うには、まず復元リクエストを開始し、オブジェクトが高頻度アクセス階層に移動されるまで待つ必要があります。

対象外となったオブジェクトのストレージクラスを確認

コマンド
aws s3api head-object --bucket <バケット名> --key <オブジェクトキー>
出力例
{
    "AcceptRanges": "bytes",
    "Expiration": "expiry-date=\"Tue, 18 Apr 2034 00:00:00 GMT\", rule-id=\"expiration_days\"",
    "ArchiveStatus": "ARCHIVE_ACCESS",
    "LastModified": "2024-04-19T04:39:27+00:00",
    "ContentLength": 373495,
    "ETag": "\"53b177d09c74ff229ba6d88576dae5fe\"",
    "VersionId": "null",
    "ContentType": "application/x-gzip",
    "ServerSideEncryption": "AES256",
    "Metadata": {},
    "StorageClass": "INTELLIGENT_TIERING"
}

アーカイブクラスのオブジェクトを復元するS3バッチの作成

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/batch-ops-create-job.html#specify-batchjob-manifest
https://docs.aws.amazon.com/cli/latest/reference/s3control/create-job.html

  • S3バッチの場合は標準取り出しか対応していない(大容量でコスト削減などはできない)
コマンド
    aws s3control create-job \
    --account-id 123456789012 \
    --region ap-northeast-1 \
    --operation '{
        "S3InitiateRestoreObject": {
            "GlacierJobTier": "STANDARD"
        }
    }' \
    --report '{
        "Bucket": "arn:aws:s3:::report-bucket",
        "Format": "Report_CSV_20180820",
        "Enabled": true,
        "ReportScope": "AllTasks",
        "Prefix": "reports"
    }' \
    --manifest-generator '{
        "S3JobManifestGenerator": {
            "SourceBucket": "arn:aws:s3:::source-bucket",
            "EnableManifestOutput": true,
            "ManifestOutputLocation": {
                "Bucket": "arn:aws:s3:::manifest-output-bucket",
                "ManifestPrefix": "manifests",
                "ManifestFormat": "S3InventoryReport_CSV_20211130"
            },
            "Filter": {
                "MatchAnyStorageClass": ["INTELLIGENT_TIERING"]
            }
        }
    }' \
    --priority 10 \
    --role-arn arn:aws:iam::123456789012:role/S3BatchOperationsRole \
    --client-request-token $(uuidgen) \
    --confirmation-required \
    --description "Restore request for Intelligent-Tiering objects in Archive Access"

パラメータ詳細

operation

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/API/API_control_JobOperation.html
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/batch-ops-initiate-restore-object.html

manifest-generator

https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_S3ManifestOutputLocation.html

必要な権限

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/batch-ops-iam-role-policies.html

dehio3dehio3

aws s3control create-jobサンプル

コピー

S3PutObjectCopy
aws s3control create-job \
  --account-id XXXXXXXXXXXX \
  --operation '{
    "S3PutObjectCopy": {
      "TargetResource": "arn:aws:s3:::your-target-bucket",
      "CannedAccessControlList": "bucket-owner-full-control",
      "StorageClass": "STANDARD_IA"
    }
  }' \
  --report '{
    "Bucket": "arn:aws:s3:::your-target-bucket",
    "Prefix": "reports/",
    "Enabled": true,
    "Format": "Report_CSV_20180820",
    "ReportScope": "AllTasks"
  }' \
  --manifest-generator '{
    "S3JobManifestGenerator": {
      "SourceBucket": "arn:aws:s3:::your-source-bucket",
      "EnableManifestOutput": true,
      "ManifestOutputLocation": {
        "Bucket": "arn:aws:s3:::your-source-bucket",
        "ManifestPrefix": "manifests",
        "ManifestFormat": "S3InventoryReport_CSV_20211130"
      }
    }
  }' \
  --priority 1 \
  --role-arn arn:aws:iam::XXXXXXXXXXXX:role/S3BatchReplicationRole \
  --description "Copy objects from source-bucket to target-bucket with STANDARD_IA storage class" \
  --client-request-token $(uuidgen) \
  --profile your-profile

Lambda呼び出し

LambdaInvoke
aws s3control create-job \
  --account-id XXXXXXXXXXXX \
  --operation '{
    "LambdaInvoke": {
      "FunctionArn": "arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:S3CopyFunction"
    }
  }' \
  --report '{
    "Bucket": "arn:aws:s3:::your-target-bucket",
    "Prefix": "reports/",
    "Enabled": true,
    "Format": "Report_CSV_20180820",
    "ReportScope": "AllTasks"
  }' \
  --manifest-generator '{
    "S3JobManifestGenerator": {
      "SourceBucket": "arn:aws:s3:::your-source-bucket",
      "EnableManifestOutput": true,
      "ManifestOutputLocation": {
        "Bucket": "arn:aws:s3:::your-source-bucket",
        "ManifestPrefix": "manifests",
        "ManifestFormat": "S3InventoryReport_CSV_20211130"
      }
    }
  }' \
  --priority 1 \
  --role-arn arn:aws:iam::XXXXXXXXXXXX:role/S3BatchOperationRole \
  --client-request-token $(uuidgen) \
  --profile your-profile
このスクラップは2ヶ月前にクローズされました