我们有一个云形成堆栈,其中包含RDS、S3等数据存储资源。我们希望保留它们,即使堆栈被删除,或者在升级堆栈时,很少有参数可以导致服务重新创建。因此,我们将删除策略设置为retain。现在,当我重新运行堆栈时,它无法创建资源,因为存在具有相同名称的资源。
我想通过检查资源是否存在来创建资源。云的形成有没有可能自己进行这种检查。我还意识到,保留的资源已经成为红色资源,因为它们现在不是云形成的一部分。
绕过此解决方案的最佳方法是什么?
发布于 2021-07-07 20:15:16
您必须将这些存储桶import回您的堆栈。
遗憾的是,CFN没有检查某些内容是否存在并自动执行导入的功能。因此,您必须使用AWS控制台手动完成此操作,或者使用SDK或CLI以编程方式完成此操作。
发布于 2021-07-07 20:36:47
一般来说,这是一个复杂的问题,如果不了解您的设置和特定的CF模板,很难给出具体的建议。我将讨论一些一般性的观点和建议的操作。
Fn::ImportValue在其他堆栈中引用它们。通过这种方式,您可以将“稳定”资源从“易变”资源中分离出来,同时仍然具有CF的优势。
发布于 2021-12-20 09:11:06
我认为是的,您可以通过在您的CFN中添加一个条件来做到这一点,无论是JSON/YAML
{
"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”
aws cloudformation deploy --template ./s3BucketWithCondition.json --stack-name bucket-stack --parameter-overrides ShouldCreateBucketInputParameter="true"https://stackoverflow.com/questions/68285580
复制相似问题