簡體   English   中英

AWS CloudFormation 條件模板驗證

[英]AWS CloudFormation conditional template validation

我有一個模板,可以為多個區域(例如 us-east-1 和 ap-southeast-1)使用 DynamoDB 和 DAX 創建 CloudFormation。 在為 us-east-1 工作時,此模板不適用於 ap-southeast-1,因為該地區尚不可用 DAX。

我希望這可以使用Conditions來完成,因此對於一個區域 (us-east-1),我將同時擁有 DynamoDB 和 DAX,而對於另一個區域 (ap-southeast-1) - 只有 DynamoDB:

Conditions: 
  isDAXAvailable: !Not [!Equals [ !Ref "AWS::Region", ap-southeast-1 ]]

Resources:
  DynamoDBTable:
    Type: AWS::DynamoDB::Table
    Properties:
    .....

  DaxCluster:
    Type: AWS::DAX::Cluster
    Condition: isDAXAvailable
    Properties:
    .....

但不幸的是我收到一個錯誤:

調用 ValidateTemplate 操作時發生錯誤 (ValidationError):模板格式錯誤:無法識別的資源類型:[AWS::DAX::Cluster]

無論如何都可以配置這樣的模板還是應該創建一個單獨的模板?

模板驗證是針對區域中可用的資源完成的。 由於DAX目前在ap-southeast-1中不可用,因此AWS :: DAX :: Cluster資源將在那里驗證失敗。 關於如何完成這項工作,我有幾點建議:

  • 預處理模板以去除當前不支持的區域中的DAX資源
  • 將模板拆分為三個單獨的模板,我稱之為DAXNoDAX其他模板:
    • 在支持DAX的區域中,使用包含群集的DAX模板創建堆棧,並將群集名稱導出為ClusterName的值。
    • 在不支持DAX的區域中,使用NoDAX模板創建堆棧,並將none作為ClusterName的值導出。 由於每個模板都需要資源,因此請將AWS :: CloudFormation :: WaitConditionHandle包含為此模板的唯一資源。
    • 在所有區域中,使用導入DaxClusterName的 其他模板創建堆棧,並基於Fn:Equals: [“DaxClusterName”, “none”]創建條件Fn:Equals: [“DaxClusterName”, “none”] 然后使用條件來確定此模板中的資源是否可以依賴於群集。

目前,有一種變通方法可以將像Transform: AWS::Serverless-2016-10-31這樣的Transform: AWS::Serverless-2016-10-31添加到您的模板中

雖然這可能需要添加CAPABILITY_AUTO_EXPAND功能,但“使用此轉換不會產生任何費用” ,如果您沒有任何AWS::Serverless資源,它應該不會影響您的模板,並且您應該已經在使用此轉換,如果你有AWS::Serverless資源

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM