【发布时间】:2021-02-21 13:54:02
【问题描述】:
我想导入在另一个堆栈中创建的现有 S3 存储桶。我尝试使用下面的两个 CF 模板来执行此操作,但是当我尝试创建使用者堆栈时,它会导致 CREATE_FAILED 事件并显示“已存在”错误消息。
生产者模板:
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Main stack that creates S3 bucket.",
"Resources": {
"myS3Bucket" : {
"Type" : "AWS::S3::Bucket",
"DeletionPolicy" : "Retain",
"Properties": {"BucketName": "bucket-name" }
}
},
"Outputs": {
"BucketId": {
"Description": "Bucket ID",
"Value": { "Ref": "myS3Bucket" },
"Export": { "Name": { "Fn::Sub": "${AWS::StackName}-BUCKETID" }}
}
}
}
这是一个消费者堆栈模板:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "AWS CloudFormation Sample Template.",
"Resources" : {
"S3ImportedBucket" : {
"Type" : "AWS::S3::Bucket",
"Properties" : {
"BucketName" : { "Fn::ImportValue" : "main-BUCKETID"}
}
}
}
}
应该在模板中进行哪些更改才能使其正常工作?
【问题讨论】:
-
这是一个非常糟糕的主意,我什至不确定是否可以让两个堆栈管理相同的资源。你想达到什么目标?也许有更好的方法?
-
@Marcin 基本上是尝试使用另一个堆栈中的存储桶来执行诸如策略分配之类的事情(以便消费者堆栈中的服务可以访问该存储桶)等等。
-
遗憾的是,您无法按照您尝试的方式执行此操作。相反,就像发布的答案一样,您从一个堆栈导出输出,然后使用
ImportValue引用它。 -
是的,CF中资源导入的限制太多了。
-
@Cybex 你解决了吗?我有同样的问题。
标签: amazon-web-services amazon-s3 amazon-cloudformation