将复杂对象作为参数传递给子堆栈

时间:2018-08-15 23:26:45

标签: amazon-cloudformation

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

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

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

1 个答案:

答案 0 :(得分:1)

据我所知,由于堆栈执行,没有办法传递复杂的对象。就像消息说的那样,输出必须是字符串或单一类型(如果为Cloudformation,则为整数和布尔值)。

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

  1. 将自定义资源的资源标识作为嵌套堆栈的参数发送;
  2. 在嵌套堆栈中,以resourceId作为参数再次调用lambda函数;
  3. 更改lambda代码以检查resourceId的新参数(在ResourceParameters内​​部,而不是CloudFormation发送的Common Resource ID中)。
  4. 如果参数不为空(或者第一次调用时未传递定义的值),请使用旧值进行响应(您必须有一种方法可以将该值保留在某个位置或在运行时进行检查)。
  5. 在嵌套堆栈(使用resourceId参数)调用的情况下,将lambda代码更改为不执行更新/删除操作。

同样,如果没有更多有关您特定问题的信息,很难考虑采用其他方法。但是,请将此反应用作思考的食物。