首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在云表单中有条件地创建s3 bucket?

如何在云表单中有条件地创建s3 bucket?
EN

Stack Overflow用户
提问于 2021-07-07 19:56:43
回答 3查看 145关注 0票数 0

我们有一个云形成堆栈,其中包含RDS、S3等数据存储资源。我们希望保留它们,即使堆栈被删除,或者在升级堆栈时,很少有参数可以导致服务重新创建。因此,我们将删除策略设置为retain。现在,当我重新运行堆栈时,它无法创建资源,因为存在具有相同名称的资源。

我想通过检查资源是否存在来创建资源。云的形成有没有可能自己进行这种检查。我还意识到,保留的资源已经成为红色资源,因为它们现在不是云形成的一部分。

绕过此解决方案的最佳方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2021-07-07 20:15:16

您必须将这些存储桶import回您的堆栈。

遗憾的是,CFN没有检查某些内容是否存在并自动执行导入的功能。因此,您必须使用AWS控制台手动完成此操作,或者使用SDK或CLI以编程方式完成此操作。

票数 0
EN

Stack Overflow用户

发布于 2021-07-07 20:36:47

一般来说,这是一个复杂的问题,如果不了解您的设置和特定的CF模板,很难给出具体的建议。我将讨论一些一般性的观点和建议的操作。

  1. “当我重新运行堆栈时,它无法创建资源,因为存在同名的资源”-这是命名资源的常见问题。作为一般指导,避免静态地命名那些没有人工操作员会与之交互的资源。如果您有严格命名约定,则始终向名称添加随机后缀,这将使它们对堆栈是唯一的。

  1. 如果您有存储资源,即S3存储桶和DB,请考虑将它们放入单独的CF堆栈中,并将相关属性(如DB端点地址)公开为CF exports。您可以使用Fn::ImportValue在其他堆栈中引用它们。通过这种方式,您可以将“稳定”资源从“易变”资源中分离出来,同时仍然具有CF

的优势。

  1. 你可以通过import some existing resources进入CF栈。它们将作为堆栈的合法部分。但并不是所有的资源都可以这样导入。
票数 0
EN

Stack Overflow用户

发布于 2021-12-20 09:11:06

我认为是的,您可以通过在您的CFN中添加一个条件来做到这一点,无论是JSON/YAML

代码语言:javascript
运行
复制
{
"AWSTemplateFormatVersion": "2010-09-09",
"Transform": "AWS::Serverless-2016-10-31",
"Description": "",
"Parameters": {
    "ShouldCreateBucketInputParameter": {
      "Type": "String",
      "AllowedValues": [
        "true",
        "false"
      ],
      "Description": "If true then the S3 bucket that will be proxied will be created with the CloudFormation stack."
    }
},
"Conditions": {
  "CreateS3Bucket": {
    "Fn::Equals": [
      {
        "Ref": "ShouldCreateBucketInputParameter"
      },
      "true"
    ]
  }
},
"Resources": {
    "SerialNumberBucketResource": {
        "Type": "AWS::S3::Bucket",
        "Condition": "CreateS3Bucket",
        "Properties": {
            "AccessControl": "Private"
        }
    }
  }   
}

然后使用CLI,您只需设置"true“或"false”

代码语言:javascript
运行
复制
aws cloudformation deploy --template ./s3BucketWithCondition.json --stack-name bucket-stack --parameter-overrides ShouldCreateBucketInputParameter="true"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68285580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档