gpt4 book ai didi

aws-cloudformation - Cloudformation条件嵌套堆栈 Unresolved 资源依赖性

转载 作者:行者123 更新时间:2023-12-03 07:40:54 27 4
gpt4 key购买 nike

我有一个 Cloudformation 堆栈,仅当现有数据库 URL 未作为参数传入时,该堆栈才会有条件地调用嵌套堆栈来创建 RDS 实例。

如果我将值传递给 DBExistingEndpoint堆栈中的参数,条件CreateDB设置为 false,则根本不会调用嵌套的 RDS 堆栈。

问题在于 AutoScaling 启动配置资源中存在条件依赖性。我需要引用嵌套堆栈的 URL 输出,或作为参数传入的 URL,以放置在新启动的实例的文件中。

    Parameters:
DBExistingEndpoint:
Type: String
Description: Set to a URL of a RDS instance to use an existing DB, otherwise create one
Default: ''
...

Conditions:
CreateDB:
!Equals [!Ref DBExistingEndpoint, '']
...

Resources:
# Database created only if existing URL not passed in
DB:
Type: AWS::CloudFormation::Stack
Condition: CreateDB
Properties:
TemplateURL: ...
...

ClusterInstanceLaunchConfig:
Type: AWS::AutoScaling::LaunchConfiguration
Metadata:
AWS::CloudFormation::Init:
config:

files:
/etc/dbenv:
mode: "000640"
owner: root
group: root
content:
!Join
- "\n"
-
- !Sub ["DB_HOST=${DBEndpointAddress}", DBEndpointAddress: !If [CreateDB, !GetAtt DB.Outputs.RDSEndPointAddress, !Ref DBExistingEndpoint]]
...

问题是,如果我传入现有端点 URL,则会(正确地)跳过数据库资源,但堆栈创建失败,并显示 Template format error: Unresolved resource dependencies [DB] in the Resources block of the template

理想情况下是DB.output.RDSEndpointAddress引用ClusterInstanceLauchConfig应忽略资源,因为 CreateDB条件在 !If是假的

有人知道如何围绕这个限制进行编码吗?

最佳答案

您应该尝试将条件语句设置为与现在不同的级别。

可以肯定的是,在 LaunchConfiguration 本身的级别上使用条件语句,这也意味着大量的代码重复。但也许您可以尝试查看 contentfiles 等级别的条件,看看是否有中间立场,以保持低重复,但避免错误你现在就明白了。

关于aws-cloudformation - Cloudformation条件嵌套堆栈 Unresolved 资源依赖性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68721125/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com