2016-11-14 39 views
0

由于云形成堆栈中资源数量的限制,我们需要有多个堆栈,其中我们的主堆栈启动了其他几个较小的子堆栈。我们有在主堆栈中创建的等待条件,这些条件需要传递给某些子堆栈中的资源。目前,我们已经将整个子堆等待在WaitHandle上,而不是子堆中的单个资源。但是,这不必要地增加了我们的发布时间。 为了解决这个问题,我试过将WaitHandle作为参数传递给substack,但我不确定参数的类型是什么。 我也听到我的同事说你可以尝试将WaitHandle的URL作为字符串传递,然后尝试在子包中创建一个带有该URL的新WaitHandle,但是我没有看到任何文档。 我正试图在CloudFormation中做甚么?如何将CloudFormation的WaitHandle传递到不同的Cloud Formation堆栈?

回答

1

是的,这是可能的。对于传递WaitHandle的URL作为一个字符串到您的亚组,根据AWS::CloudFormation::WaitConditionHandle文档,

当您使用Ref函数引用WaitConditionHandle资源,AWS CloudFormation返回presigned URL。您将此URL传递给您的Amazon EC2实例上运行的应用程序或脚本,以便将信号发送到该URL。

实际上,有两种不同的方式来实现自己的目标:

  1. {"Ref": "MyWaitHandle"}作为参数传递给你的亚组,然后让资源/在你的亚组包括此参数(例如,使用${ParentWaitHandle}内一个Fn::Sub串)作为presigned URL发送一个“等待状态信号”到,使用HTTP PUT请求(例如,与cURL,如在Creating Wait Conditions in a Template演练使用):

curl -X PUT -H 'Content-Type:' --data-binary '{"Status": "SUCCESS", "Reason": "Configuration Complete","UniqueId": "$UNIQUE_ID", "Data": "Application has completed configuration."}' "${ParentWaitHandle}"

  • 仅传递WaitCondition资源名称,而不是到亚组(通过Ref),并使用SignalResource CloudFormation服务API调用来直接发信号通知WaitCondition资源。这使您可以跳过处理单独的WaitConditionHandle资源,但需要授予cloudformation:SignalResource IAM许可信令资源才能进行API调用。例如,使用AWS CLI:
  • aws cloudformation signal-resource \ --status SUCCESS \ --unique-id $(curl -s http://169.254.169.254/latest/meta-data/instance-id) \ --logical-resource-id ${ParentWaitCondition} \ --stack-name $PARENT_STACK \ --region ${AWS::Region} \ || true

    +0

    我需要做的是相反的方式,其中的WaitHandle在主堆栈解决,但在亚组的资源依赖于WaitHandle中的条件。我尝试将等待句柄作为参数传递,并通过在substack中传入的句柄创建一个等待条件,但AWS给了我一个错误,表示您不能等待来自不同堆栈的WaitHandle Url。 – user3517454

    +0

    这听起来像你真正想要解决的问题不是“如何将CloudFormation的WaitHandle传递给另一个Cloud Formation堆栈”,而是“如何使嵌套的堆栈资源依赖于父堆栈中的资源”,真的很不一样。我相信我已经回答了所提出的问题,对于新问题,我建议您创建一个新的SO问题并更清楚地描述您的问题。 – wjordan

    +0

    够公平的。我也会在AWS论坛上提问这个问题,看看我能否得到答复。虽然,我现在已经尝试在一个带有等待句柄url的substack中创建一个WaitCondition,该句柄作为参数从另一个堆栈传入。这导致“不能等待指定的句柄URL - 句柄必须来自同一栈内”。 – user3517454

    相关问题