cfn-hup - AWS CloudFormation

這是新的 CloudFormation 範本參考指南。請更新您的書籤和連結。如需 CloudFormation 入門的說明,請參閱 AWS CloudFormation 使用者指南

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

cfn-hup

cfn-hup 協助程式是一個常駐程式,它會偵測資源中繼資料中的變更,並在偵測到變更時執行使用者指定的動作。這可讓您透過 UpdateStack API 動作在執行中的 Amazon EC2 執行個體上進行組態更新。

如需詳細資訊,請參閱AWS CloudFormation 《 使用者指南》中的更新 CloudFormation 堆疊教學課程。

語法

cfn-hup --config|-c config.dir \ --no-daemon \ --verbose|-v

選項

名稱 描述 必要

--config|-c config.dir

指定 cfn-hup 指令碼查找 cfn-hup.confhooks.d 目錄的路徑。在 Windows 上,預設路徑為 system_drive\cfn。在 Linux 上,預設路徑為 /etc/cfn

--no-daemon

指定此選項以執行一次 cfn-hup 指令碼並結束。

-v, --verbose

指定此選項以使用詳細資訊模式。

cfn-hup.conf 組態檔案

cfn-hup.conf 檔案會存放 cfn-hup 常駐程式設為目標的堆疊名稱和 AWS 憑證。

cfn-hup.conf 檔案會使用以下格式:

[main] stack=<stack-name-or-id>
名稱 描述 必要

stack

堆疊名稱或 ID。

類型:字串

credential-file

僅限擁有者的憑證檔案,其格式與命令列工具所使用的格式相同。

類型:字串

條件role 參數會取代此參數。

role

與執行個體相關聯的 IAM 角色名稱。

類型:字串

region

AWS 區域 包含堆疊的 名稱。

範例us-east-2

umask

cfn-hup 常駐程式使用的 umask

指定此值時可以包含或不包含前置 0。在這兩種情況下,都會解譯為八進位數字 (類似於 Linux umask 命令)。此參數在 Windows 上不會造成影響。

類型:介於 00777 的八進位整數

預設022,1.4–22 版和更高版本。022 的預設值會遮罩群組和全域寫入許可,因此 cfn-hup 常駐程式建立的檔案預設為在群組或全域範圍內不可寫入。1.4-21 版本和更早版本的預設值為 0,表示不遮罩任何內容。

interval

用來檢查資源中繼資料變更的間隔,以分鐘為單位。

類型:整數

預設15

verbose

指定是否使用詳細資訊記錄。

類型:布林值

預設false

hooks.conf 組態檔案

會在 hooks.conf 組態檔案中定義 cfn-hup 常駐程式定期呼叫的使用者動作。hooks.conf 檔案會使用以下格式

[hookname] triggers=post.add or post.update or post.remove path=Resources.<logicalResourceId> (.Metadata or .PhysicalResourceId)(.<optionalMetadatapath>) action=<arbitrary shell command> runas=<runas user>

執行操作時,會在目前環境 (cfn-hup 所在位置) 的複本中執行它,並將 CFN_OLD_METADATA 設定為先前依路徑指定的中繼資料值,將 CFN_NEW_METADATA 設定為目前值。

掛接組態檔案只會在 cfn-hup 常駐程式啟動時載入,因此新的掛接需要重新啟動常駐程式。先前中繼資料值的快取存放在 /var/lib/cfn-hup/data/metadata_db - 您可以刪除此快取,強制 cfn-hup 再次執行所有 post.add 動作。

名稱 描述 必要

hookname

此掛接的唯一名稱。

類型:字串

triggers

要偵測的條件逗號分隔清單。

有效值post.addpost.updatepost.remove

範例post.add, post.update

path

中繼資料物件的路徑。支援在中繼資料區塊內有任意深度的路徑。

途徑格式選項
  • Resources.<LogicalResourceId>— 監控資源的上次更新時間,資源發生任何變更時觸發。

  • Resources.<LogicalResourceId>.PhysicalResourceId— 監控資源的實體 ID,只有相關聯的資源身分變更時才會觸發 (例如新的 EC2 執行個體)。

  • Resources.<LogicalResourceId>.Metadata(.optional path)— 監控資源的中繼資料是否有變更 (中繼資料子路徑可指定為任意深度層級以監控特定值)。

action

按照指定執行的任意 shell 命令。

runas

執行命令的使用者。cfn-hup 使用 su 命令切換到使用者。

hooks.d 目錄

為了支援部署變更通知勾點的數個應用程式組合,cfn-hup 支援勾點組態目錄中名為 hooks.d 的目錄。您可以將一個或多個額外的勾點組態檔案放在 hooks.d 目錄中。這些額外的勾點檔案必須與 hooks.conf 檔案使用相同的配置。

cfn-hup 常駐程式會剖析及載入此目錄中的每個檔案。如果 hooks.d 目錄中有任何勾點與 hooks.conf 中的勾點同名,則會合併這些勾點 (這表示 hooks.d 會覆寫 hooks.conf 中兩個檔案同時指定的任何值)。

範例

在下列範例中,當您變更與 LaunchConfig 資源相關聯的 AWS::CloudFormation::Init 資源時,CloudFormation 會觸發 cfn-auto-reloader.conf 勾點檔案。

JSON

... "LaunchConfig": { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Metadata" : { "AWS::CloudFormation::Init" : { ... "/etc/cfn/hooks.d/cfn-auto-reloader.conf": { "content": { "Fn::Join": [ "", [ "[cfn-auto-reloader-hook]\n", "triggers=post.update\n", "path=Resources.LaunchConfig.Metadata.AWS::CloudFormation::Init\n", "action=/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource LaunchConfig ", " --configsets wordpress_install ", " --region ", { "Ref" : "AWS::Region" }, "\n", "runas=root\n" ]]}, "mode" : "000400", "owner" : "root", "group" : "root" } ...

YAML

... LaunchConfig: Type: AWS::AutoScaling::LaunchConfiguration Metadata: AWS::CloudFormation::Init: ... /etc/cfn/hooks.d/cfn-auto-reloader.conf: content: !Sub | [cfn-auto-reloader-hook] triggers=post.update path=Resources.LaunchConfig.Metadata.AWS::CloudFormation::Init action=/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region} runas=root mode: "000400" owner: "root" group: "root" ...

您也可以造訪我們的 GitHub 儲存庫,下載使用 cfn-hup範例範本,包括下列範本。