2016-12-05 116 views
1

我有一個包含一個InternetGateway網絡堆棧導入VPCGatewayAttachment,其經由VPCGatewayAttachment元件附接至一個VPC。從另一模板

我有一個應用程序堆棧在那裏我有一個EIP,並應於目前看起來像這樣的VPCGatewayAttachment依靠:

"MyEIP": { 
    "Type": "AWS::EC2::EIP", 
    "DependsOn": [ 
    { "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackName}-GatewayAttachment" } } 
    ], 
} 

不過,我得到一個模板錯誤,說,每DependsOn值必須是字符串。那麼我如何導入這個值呢?

+0

你有沒有在你嘗試從導入堆棧出口嗎? – Darek

回答

0

你並不需要使用在你的應用程序堆棧的AWS::EC2::EIP資源DependsOn屬性,因爲在一個單獨的網絡堆棧正在創建AWS::EC2::VPCGatewayAttachment資源。這是在EIP資源的Domain財產指出:

如果定義了彈性IP地址,並將其與在同一模板定義的VPC 關聯,必須在申報的依賴在此資源上使用DependsOn屬性的VPC網關附件。

當在單獨的模板中定義VPC時,不需要顯式聲明任何依賴關係。只要應用程序堆棧在網絡堆棧之前被刪除,EIP將在VPC網關附件之前被刪除。

更一般地,宣告棧之間的DependsOn將沒有必要。由於如果另一個堆棧引用其某個輸出時不能刪除堆棧,則使用Fn::ImportValue創建一個跨堆棧引用將創建一個依賴關係,即在引用堆棧之前必須刪除包含該引用的堆棧。

+0

它可能沒有必要,但是這不起作用的原因是DependsOn需要一個字符串,而不是某個函數;) – gsaslis

+0

是的,問題已經確認每個DependsOn值都必須是一個字符串。所問的是「那麼我如何導入這個值?」 (我的答案:你不需要,也沒有必要,這是爲什麼)。 – wjordan

-2

您對您的import語句括號。其中JSON意味着對象將是一個數組而不是一個字符串。刪除這些括號,你會得到這個錯誤。

"MyEIP": { 
    "Type": "AWS::EC2::EIP", 
    "DependsOn": { "Fn::ImportValue": { "Fn::Sub": "${NetworkStackName}-GatewayAttachment" } } 
} 
+0

取決於接受一個字符串和一個字符串列表,所以這不是問題 – masterforker

+0

@Danlee你得到什麼錯誤消息? –

-1

由於文檔說(和您已經閱讀),該DependsOn屬性接受(字符串或列表)的字符串。

這意味着字面上,因爲,你不打算使用CloudFormation FnRef功能插入一些價值在那裏,而你只需要插入CloudFormation資源的名稱,就像你有它在你的模板。

所以,你的模板應閱讀類似:

"MyEIP": { 
    "Type": "AWS::EC2::EIP", 
    "DependsOn": [ 
    "MyGatewayAttachment" 
    ], 
} 

,其中MyGatewayAttachment在模板中相應的CloudFormation資源的

如果您再看看官方文檔上的examples,您會發現這是在所有示例中完成的方式。

+0

下載者會關注爲什麼? – gsaslis

相關問題