cfn-hup
描述
cfn-hup 帮助程序作为一项后台程序,旨在检测资源元数据中出现的变更,并在检测出变更的情况下,运行用户指定操作。通过此项操作,您可以通过 UpdateStack
API 操作对您正在运行的 Amazon EC2 实例进行配置更新。
语法
cfn-hup --config|-c config.dir \ --no-daemon \ --verbose|-v
Options
名称 | 描述 | 必填 |
---|---|---|
|
指定 cfn-hup 脚本寻找 |
否 |
|
指定该选项可运行 cfn-hup 脚本一次,然后退出。 |
否 |
|
指定该选项可使用详细模式。 |
否 |
cfn-hup.conf 配置文件
cfn-hup.conf 文件存储堆栈的名称和 cfn-hup 守护程序的目标 AWS 凭证。
cfn-hup.conf 文件采用以下格式:
[main] stack=
<stack-name-or-id>
名称 | 描述 | 必填 |
---|---|---|
|
堆栈名称或 ID。 类型:字符串 |
是 |
|
仅用户可用凭证文件,与用于命令行工具的格式相同。 类型:字符串 条件: |
否 |
|
与实例关联的 IAM 角色的名称。 类型:字符串 |
否 |
|
包含堆栈的 AWS 区域的名称。 示例:us-east-2 |
否 |
|
cfn-hup 守护程序使用的 umask。 指定此值时可选择带或不带前导 0。在两种情况下,它都会被解释为八进制数(与 Linux 类型:介于 默认值: |
否 |
|
用于检查资源元数据更改的时间间隔(以分钟为单位)。 类型:整数 默认值: |
否 |
|
指定是否要使用详细日志记录。 类型:布尔值 默认值: |
否 |
hooks.conf 配置文件
cfn-hup 后台程序定期调用的用户操作已在 hooks.conf 配置文件中予以定义。hooks.conf 文件采用以下格式:
[hookname] triggers=post.add
or
post.updateor
post.remove path=Resources.<logicalResourceId>
(.Metadataor
.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 操作。
名称 | 描述 | 必填 |
---|---|---|
|
此挂钩的唯一名称。 类型:字符串 |
是 |
|
待检测条件的逗号分隔列表。 有效值: 示例: |
是 |
|
元数据对象路径。支持元数据块中的随机深度路径。 路径格式选择
|
是 |
|
按照既定运行的任意 Shell 程序命令。 |
是 |
|
运行命令的用户。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" : { "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" ...
其他示例
有关示例模板,请参阅 在 Amazon EC2 上部署应用程序。