首页 > 解决方案 > 将复杂对象作为参数传递给子堆栈

问题描述

我想将自定义资源的输出(对象数组)作为参数传递给子堆栈。我想作为参数传递给子堆栈的一个例子是:

[
{"Role":"Role1","IdentifierType":"Prefix","Identifiers":"Bucket1"}
{"Role":"Role2","IdentifierType":"Prefix","Identifiers":"Bucket2"}
]

如何将其传递给子堆栈?我尝试将子堆栈中的参数声明为 String,然后将其声明为 CommaDelimitedList。两次,堆栈都给出错误:“属性参数的值必须是具有字符串(或简单类型)属性的对象”

标签: amazon-cloudformation

解决方案


据我所知,由于堆栈执行,没有办法传递复杂的对象。就像消息说的那样,输出需要是字符串或单一类型(在 cloudformation 的情况下为整数和布尔值)。

没有更多信息很难为您提供替代方案,但我们假设您的自定义资源基于 lambda。假设您可以控制自定义资源的代码。如果是这种情况,您可以:

  1. 将自定义资源的资源标识作为嵌套堆栈的参数发送;
  2. 在嵌套堆栈中,以 resourceId 作为参数再次调用 lambda 函数;
  3. 更改 lambda 代码以检查 resourceId 的新参数(在 ResourceParameters 内,而不是在 CloudFormation 发送的 Common Resource Id 内)。
  4. 如果参数不为空(或者不是在第一次调用时传递的定义值),则使用旧值响应(您必须有办法将这些值保存在某个地方或在运行时检查。);
  5. 在嵌套堆栈调用的情况下(使用 resourceId 参数),更改 lambda 代码以在更新/删除中不采取行动。

同样,如果没有有关您的具体问题的更多信息,很难考虑替代方案。但是将此响应用作思考的食物。


推荐阅读