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

Amazon cloudformation 将复杂对象作为参数传递给子堆栈,amazon-cloudformation,Amazon Cloudformation,我想将自定义资源(对象数组)的输出作为参数传递给子堆栈。我想作为参数传递给子堆栈的一个示例是: [ {"Role":"Role1","IdentifierType":"Prefix","Identifiers":"Bucket1"} {"Role":"Role2","IdentifierType":"Prefix","Identifiers":"Bucket2"} ] 如何将其传递到子堆栈?我尝试将子堆栈中的参数声明为String,然后将其声明为CommaDelimitedList。这两次,堆

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

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

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

正如我现在所知,由于堆栈执行,无法传递复杂对象。正如消息所说,输出需要是字符串或单个类型(在cloudformation中为整数和布尔)

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

  • 将自定义资源的资源标识作为嵌套堆栈的参数发送
  • 在嵌套堆栈中,以resourceId作为参数再次调用lambda函数
  • 更改lambda代码以检查resourceId的新参数(在ResourceParameters内,而不是在CloudFormation发送的公共资源Id内)
  • 如果参数不是空的(或者不是第一次调用时传递的定义值),则使用旧值进行响应(您必须有办法将这些值保留在某个位置,或者在运行时进行检查)
  • 将lambda代码更改为在嵌套堆栈(使用resourceId参数)调用更新/删除时不执行操作
  • 同样,如果没有关于你的具体问题的更多信息,很难在备选方案中进行思考。但是用这个反应作为思考的食物