2016-05-04 92 views
2

我使用AWS CloudFormation創建了一堆應用程序資源,並且在創建資源時,CloudFormation在名稱末尾添加了一個散列以使其具有唯一性。以編程方式利用使用CloudFormation創建的資源

即如果您想創建Kinesis流名稱MyStream,則實際名稱將類似於my-stack-MyStream-1F8ISNCLP0W4O

我希望能夠以編程方式訪問資源而無需知道散列,而無需查詢AWS以查找資源,以便自己匹配名稱,也無需手動步驟。是否有人知道以編程方式和可預測的方式在您的應用程序中使用AWS資源的便捷方式?

這裏是我能想到的不太理想的選擇:

  1. 設置上的資源(即name -> MyStream)標籤和查詢AWS獲得實際的資源名稱。
  2. 查詢AWS以獲取資源名稱列表,並查找預期名稱上的部分匹配。
  3. 後您創建資源,手動複製的實際名稱爲您的配置文件(可能是sanest這些選項)
+0

3號是我們所做的。我們只抓取堆棧中的輸出,並將每個鍵/值對寫入由bash產生的文件。然後這些輸出總是可以從'process.env'對象中獲得。 – idbehold

回答

2

您可以使用CloudFormation API來獲取你的堆棧的資源列表。這會給你一個邏輯id(即沒有散列的CloudFormation模板中的名稱)和匹配的物理id(帶有堆棧名稱和散列)的列表。使用AWS CLI,這將顯示一個映射兩個ID之間:

aws cloudformation describe-stack-resources 
    --query StackResources[].[LogicalResourceId,PhysicalResourceId] 
    --stack-name <my-stack> 

CloudFormation API來做到在所有由亞馬遜提供的各種語言的SDK提供了相同的查詢。

通過在運行時查詢CloudFormation或通過在構建時查詢CloudFormation並將結果嵌入到配置文件中,您可以將其用作#1的替代方法。我沒有看到使用自己的標籤而不是簡單地查詢CF API的優勢。如果您希望來自同一個模板的兩個或多個堆棧共存,則#2會造成問題。

我已經使用了運行時和構建時間方法。構建時間方法使您可以刪除CloudFormation的依賴關係或知識,但需要配置文件中的特定於棧的信息。我喜歡運行時方法,以允許將相同的構建部署到多個堆棧,並且只需要堆棧名稱即可找到所有相關資源。

+0

我玩過CloudFormation API'describe-stack-resources',我同意這是對直接查詢服務的改進。如果你可以在最後排除散列,你可以即時構建資源名稱,但這還不是一個功能。 – EmptyArsenal

相關問題