将 CloudFormation 与现有 S3 存储桶结合使用

ted*_*r42 32 amazon-s3 amazon-cloudformation

使用 CloudFormation,我想在现有存储上设置AWS::S3::Bucket 中的一些属性。换句话说,我不想创建存储桶,我只想强制执行一些设置。这是我的 CloudFormation JSON 示例:

    "websitePreviewBucket": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "AccessControl": "PublicRead",
        "VersioningConfiguration": {
          "Status": "Suspended"
        },
        "BucketName": "preview.website.com",
        "WebsiteConfiguration": {
          "IndexDocument": "index.html",
          "ErrorDocument": "error.html"
        }
      }
    },
Run Code Online (Sandbox Code Playgroud)

毫不奇怪,这在 CloudFormation 控制台中失败了:

The following resource(s) failed to create: [websitePreviewBucket].
preview.website.com already exists
Run Code Online (Sandbox Code Playgroud)

我已经创建了存储桶preview.website.com。我的意思是,这个帐户拥有那个存储桶。如何设置之类的东西AccessControl,并WebsiteConfiguration与CloudFormation现有的桶?

我看到另一个问题提出了类似的问题,但没有合适的答案。

dia*_*0ne 9

我相信您在使用 CloudFormation 修改您的 AWS 基础设施时错了。CloudFormation 的目标是以模板化方式创建 AWS 基础设施。它已被扩展以允许对其创建的资源进行一些管理,但管理现有基础设施并不是它的目标。从欢迎页面

AWS CloudFormation 使您能够以可预测的方式重复创建和预置 AWS 基础设施部署。

我相信您最接近的是使用AWS::S3::BucketPolicy在现有存储桶上设置存储桶策略。除此之外,您可以使用AWS CLI S3 API来修改您的存储桶:

  • 他可能来自不同的方向,但事实上,当您删除堆栈时,如果 S3 存储桶的删除策略是“保留”,然后您再次配置相同的堆栈,则会出现此错误。至少可以说很烦人。至少对于可以快照和还原的卷,S3 绝对无能为力。 (21认同)
  • 另一个方向是如果你想重命名你的堆栈。我投了反对票,因为这个答案假设 OP 想要修改 AWS 基础设施。这通常只是因为 CF 的其他限制,所以想要这样做并没有错。 (3认同)