我创建了 yaml 文件,该文件在 us-east-1 中创建 s3 存储桶,并使用 us-west-2 中的现有存储桶在其上附加复制规则。我的问题是,如果 us-east-1 中已存在存储桶,我想使用相同的模板 yaml 文件,并使用 us-west-2 进行复制规则。如果 s3 存储桶已经存在,则必须解决此问题,不要创建而只需修改它。但不幸的是我做不到,有人检查我的代码并帮助我吗?
AWSTemplateFormatVersion: 2010-09-09
Parameters:
BucketName:
Type: String
Default: test-source-us-east-1
Resources:
s3bucket:
Type: 'AWS::S3::Bucket'
UpdateReplacePolicy: Retain
Properties:
BucketName: !Ref BucketName
VersioningConfiguration:
Status: Enabled
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
ReplicationConfiguration:
Role: !GetAtt PublicBucketReplicationRole.Arn
Rules:
- Id: us-east-1
Status: Enabled
DeleteMarkerReplication:
Status: Enabled
Priority: 1
Filter:
Prefix: ''
Destination:
Bucket: 'arn:aws:s3:::test-source-us-west-2
PublicBucketReplicationRole:
Type: 'AWS::IAM::Role'
DeletionPolicy: Retain
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service: s3.amazonaws.com
Action: 'sts:AssumeRole'
Policies:
- PolicyName: S3ReplicationConfigurationAccessRole
PolicyDocument:
Statement:
- Effect: Allow
Action:
- 's3:ListBucket'
- 's3:GetReplicationConfiguration'
- 's3:GetObjectVersionForReplication'
- 's3:GetObjectVersionAcl'
- 's3:GetObjectVersionTagging'
- 's3:GetObjectRetention'
- 's3:GetObjectLegalHold'
Resource:
- 'arn:aws:s3:::test-source-us-east-1'
- 'arn:aws:s3:::test-source-us-east-1/*'
- 'arn:aws:s3:::test-source-us-west-2'
- 'arn:aws:s3:::test-source-us-west-2/*'
- Effect: Allow
Action:
- 's3:ReplicateObject'
- 's3:ReplicateDelete'
- 's3:ReplicateTags'
- 's3:ObjectOwnerOverrideToBucketOwner'
Resource:
- 'arn:aws:s3:::test-source-us-east-1'
- 'arn:aws:s3:::test-source-us-east-1/*'
- 'arn:aws:s3:::test-source-us-west-2'
- 'arn:aws:s3:::test-source-us-west-2/*'
s3bucketPolicyALID0987:
Type: AWS::S3::BucketPolicy
Properties:
Bucket:
Ref: s3bucket
PolicyDocument:
Statement:
- Action: s3:*
Condition:
Bool:
aws:SecureTransport: "false"
Effect: Deny
Principal: "*"
Resource:
Fn::GetAtt:
- s3bucket
- Arn
Version: "2012-10-17"
它将可重复用于在 us-east-1 中再次创建新的 s3 或现有 s3 存储桶(不要尝试创建它),以与 us-west-2 存储桶中进行同步。
可以将
DeletionPolicy: Retain
添加到模板的资源中,然后将现有资源导入到堆栈中。
流程是这样的:
Import resources into stack option
(或在 cli 中使用 aws cloudformation create-change-set --resources-to-import
...)。参考:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import-existing-stack.html