基于AWS CloudFormation YAML实现S3源桶到目标桶内容复制
AWS CloudFormation YAML实现S3源桶到目标桶内容复制
以下是基于AWS CloudFormation YAML的完整配置方案,通过S3复制功能(支持同区域/跨区域)实现源桶内容自动同步到目标桶:
CloudFormation模板
AWSTemplateFormatVersion: '2010-09-09' Description: 配置S3源桶到目标桶的自动内容复制 Parameters: SourceBucketName: Type: String Description: 源存储桶名称(需全局唯一) TargetBucketName: Type: String Description: 目标存储桶名称(需全局唯一) Resources: # 源存储桶(必须开启版本控制) SourceBucket: Type: AWS::S3::Bucket Properties: BucketName: !Ref SourceBucketName VersioningConfiguration: Status: Enabled ReplicationConfiguration: Role: !GetAtt ReplicationRole.Arn Rules: - Id: SyncAllObjects Status: Enabled Destination: Bucket: !GetAtt TargetBucket.Arn StorageClass: STANDARD # 可根据需求修改存储类,比如GLACIER_IR # 可选:过滤特定前缀/后缀的对象,如需复制所有对象则移除Filter # Filter: # Prefix: "docs/" # 目标存储桶(建议开启版本控制以保留历史版本) TargetBucket: Type: AWS::S3::Bucket Properties: BucketName: !Ref TargetBucketName VersioningConfiguration: Status: Enabled # S3复制所需的IAM角色 ReplicationRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: s3.amazonaws.com Action: sts:AssumeRole Policies: - PolicyName: S3ReplicationPolicy PolicyDocument: Version: '2012-10-17' Statement: # 允许读取源桶的对象和版本信息 - Effect: Allow Action: - s3:GetReplicationConfiguration - s3:ListBucket - s3:GetObjectVersion - s3:GetObjectVersionAcl Resource: - !Sub arn:aws:s3:::${SourceBucketName} - !Sub arn:aws:s3:::${SourceBucketName}/* # 允许写入目标桶 - Effect: Allow Action: - s3:ReplicateObject - s3:ReplicateDelete - s3:ReplicateTags - s3:GetObjectVersionTagging Resource: !Sub arn:aws:s3:::${TargetBucketName}/*
关键配置说明
- 版本控制要求:源桶必须开启版本控制,目标桶建议开启,否则复制功能无法正常工作。
- 复制规则:模板中配置的是复制源桶所有对象,如需过滤特定前缀/后缀的对象,可取消注释
Filter部分并调整规则。 - IAM角色权限:角色需具备源桶的读取权限和目标桶的写入权限,确保S3服务能承担该角色完成复制操作。
- 存储类选择:目标桶的存储类可根据业务需求修改,比如归档类存储(GLACIER)或低频访问存储(STANDARD_IA)。
注意事项
- 该配置仅会复制模板部署后新增/修改的对象,部署前已存在的对象不会自动复制。如需同步历史对象,需手动使用
aws s3 sync命令或S3批量复制功能。 - 跨区域复制时,需确保源桶和目标桶位于不同AWS区域,可在模板中为桶添加
LocationConstraint属性指定区域。
内容的提问来源于stack exchange,提问作者Azize Lbaibi
相关产品推荐
相关产品推荐

