# AWS - CloudFormation Top-Level Resource Attribute
# CloudFormation Top-Level Resource Attribute
Top-Level Resource Attribute 是用來控制對應資源的條件所需要觸發的事項關鍵字
# Condition
- 作用:根據 CloudFormation 範本中預先定義的邏輯條件(在 Conditions 區塊定義),決定是否建立該資源。
- 使用時機:實現範本的可重用性。例如,您可以使用一個條件來決定是否建立一個生產環境特有的資源(如 WAF ACL),或者根據輸入參數選擇使用特定類型的資料庫執行個體。
# DependsOn
- 作用:明確指定資源建立的順序。它強制 CloudFormation 在建立此資源之前,必須先成功建立或更新指定的另一個資源。
- 使用時機:雖然 CloudFormation 會自動處理大部分相依性(例如,EC2 Instance 相依於 VPC Subnet),但在某些隱含相依性的情況下(例如,您需要在 Lambda 函數執行前將特定的 S3 Object 放入 Bucket),就需要手動使用 DependsOn。
# Metadata
- 作用:允許您將結構化資料附加到範本或特定資源。這些資料可以被外部工具或 CloudFormation 助手腳本讀取。
- 使用時機:提供額外資訊,或用於以下兩個特殊子主題:
# AWS::CloudFormation::Init
- 作用:這是 Metadata 區塊內使用的特定結構,用於在 EC2 執行個體啟動時自動配置作業系統、安裝軟體、建立檔案等。
- 使用時機: EC2 執行個體啟動時的自動化設定。它依賴於在執行個體上運行的 cfn-init 助手腳本來解析並執行這些設定。
# AWS::CloudFormation::Authentication
- 作用:也在 Metadata 區塊內使用。它提供了一種安全的方式,讓 cfn-init 或 cfn-helper 腳本能夠從受保護的來源(例如私有 S3 儲存桶)下載檔案,而無需將 IAM 憑證明文寫入範本。
- 使用時機:需要從需要驗證的來源下載檔案到 EC2 執行個體時。
# CloudFormation 助手腳本 (Helper Scripts)
這些是安裝在 EC2 執行個體上的實用程式,用於實現上述功能:
- cfn-init: 讀取 Metadata 中的 AWS::CloudFormation::Init 並執行安裝 / 設定任務。
- cfn-signal: 在任務完成後發送信號給 CloudFormation,通常與 CreationPolicy 搭配使用。
- cfn-get-metadata: 檢索指定的 Metadata。
- cfn-do-cmd: 執行命令並將標準輸出 / 錯誤日誌發送到 CloudWatch Logs。
# CreationPolicy
- 作用:控制 CloudFormation 在成功完成一個資源(通常是 EC2 執行個體或 Auto Scaling Group)的建立後,才宣告堆疊操作完成。
- 使用時機:與 AWS::CloudFormation::Init 搭配使用。在 EC2 執行個體啟動時執行配置腳本後,它會發送一個 cfn-signal 訊號給 CloudFormation,通知它啟動完成且成功。CloudFormation 會等待指定的訊號數量或超時時間。
- 範例:用於確保 EC2 上的軟體安裝完成後,堆疊才標記為 CREATE_COMPLETE。
# UpdatePolicy
- 作用:定義如何處理資源的更新操作,特別是針對 AWS::AutoScaling::AutoScalingGroup。
- 使用時機:控制 Auto Scaling Group 的滾動更新 (Rolling Update) 行為,例如一次更新多少個執行個體、冷卻時間等。
# UpdateReplacePolicy
- 作用:處理當資源需要替換(例如,某些屬性變更導致 CloudFormation 必須刪除舊資源並建立新資源)時,如何處置舊的實體。
- 使用時機:通常與 DeletionPolicy 一起使用。它決定是否保留、快照或刪除替換前的物理資源(例如,替換 RDS 資料庫時是否建立快照)。
# DeletionPolicy
- 作用:控制當堆疊被刪除時,該資源會發生什麼事。
- 值選項:
- Delete (預設): 刪除資源。
- Retain: 保留物理資源(例如 S3 Bucket 或 RDS Instance),即使堆疊已刪除。
- Snapshot: 針對支援快照的服務(例如 RDS、ElastiCache、EC2 Volume),在刪除前建立最終快照,然後保留該快照。
- 使用時機:保護重要資料庫或 S3 儲存桶,防止因意外刪除堆疊而遺失資料。
# Reference
- AWS - DependsOn 屬性