我正在创建一个AppSync cloudformation和一个仪表板,并且我注意到ApiId导出已在很长时间之后完成创建。
我在appsync文件中创建输出,如下所示:
Outputs:
GraphQlApiIdOutput:
Description: Main GraphQl Api ID.
Value:
Fn::GetAtt:
- GraphQlApi
- ApiId
Export:
Name: GraphQlApiIdOutput
在另一个仪表板文件中:
CloudwatchDashboard:
Type: AWS::CloudWatch::Dashboard
Properties:
DashboardBody:
{
'Fn::Sub': ['{
...
,{
ApiId:
!ImportValue GraphQlApiIdOutput}]
但是,我得到了错误:No export named GraphQlApiIdOutput found. Rollback requested by user.
解决此问题的唯一方法是先删除导入值,以使堆栈创建成功,然后添加导入值。我注意到有一个等待条件,但是没有任何资源是外部的。我还注意到,仅AWS::AutoScaling::AutoScalingGroup, AWS::EC2::Instance, and AWS::CloudFormation::WaitCondition
支持创建策略。
有没有一种方法可以等待在Cloudformation中创建资源,以使模板在同一堆栈中创建输出模板之前不尝试使用输出值?
答案 0 :(得分:2)
是的,请使用DependsOn Attribute:
使用
PluginExtensions.kt
属性,您可以指定在创建另一个特定资源之后。当您向资源添加DependsOn
属性时,仅在创建DependsOn
属性中指定的资源之后才创建该资源。
该属性指向同一堆栈中的另一个资源。如果资源A为DependsOn
资源B,则只有在资源B完成创建后才创建资源A。
答案 1 :(得分:1)
当您的代码中包含此代码时:
!ImportValue GraphQlApiIdOutput
这意味着必须预先创建来自Template 1
的堆栈。
因此通常情况下,您需要执行以下操作:
Template 1
another template file
。 DependsOn
用于同一堆栈中的资源,不适用于不同堆栈。 WaitCondition
同样适用,因为在成功创建another template file
堆栈之前,您将无法从Template 1
引用Template 1
中的条件。