AWS CloudFormation
User Guide (API Version 2010-05-15)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

cfn-hup

说明

cfn-hup 帮助程序作为一项后台程序,旨在检测资源元数据中出现的变更,并在检测出变更的情况下,运行用户指定操作。通过此项操作,您可以通过 UpdateStack API 操作对您正在运行的 Amazon EC2 实例进行配置更新。

语法

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。

Type: String

credential-file

仅用户可用凭证文件,与用于命令行工具的格式相同。

例如:

注意

cfn-hup 无需提供凭证,因此您不需要使用 --credential-file 选项。但是,如果不指定证书,则 AWS CloudFormation 会检查堆栈成员并将调用范围限制为实例所属的堆栈。

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 配置文件

cfn-hup 后台程序定期调用的用户操作已在 hooks.conf 配置文件中予以定义。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

此钩子的唯一名称

Type: String

triggers

待检测条件的逗号分隔列表。

有效值post.addpost.updatepost.remove

示例: post.add, post.update

path

元数据数据元路径。支持元数据块中的随机深度路径。

路径格式选择

  • 资源。<LogicalResourceId>:监测资源的最新更新时间,触发资源的任何变更。

  • 资源。<LogicalResourceId>。PhysicalResourceId:监测资源的物理 ID,仅当已关联资源标识变更时(例如,新的 EC2 实例)发生触发行为。

  • 资源。<LogicalResourceId>。元数据(.可选路径):监测资源元数据的变更情况(可将元数据子路径指定为任一深度级别,以便监测特定数值)。

action

按照既定运行的任意外壳程序命令。

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 资源时,AWS CloudFormation 会触发 cfn-auto-reloader.conf 钩子文件。

JSON

... "LaunchConfig": { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Metadata" : { "QBVersion": {"Ref": "paramQBVersion"}, "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: QBVersion: !Ref paramQBVersion 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" ...

其他示例

有关示例模板,请参阅 使用 AWS CloudFormation 在 Amazon EC2 上部署应用程序