Heat/ApplicationDeployment
< Heat
先决条件
- 安装了cloud-init和heat-cfntools软件包的镜像。使用Heat团队的预构建镜像会更容易。
- Nova元数据服务器已启动并运行
- Heat CFN API服务已启动并运行
堆栈生命周期流程
- 用户调用Heat API创建堆栈(“heat stack-create ... myStack”)
- Heat引擎生成一个mime multipart数据块,cloud-init将消耗它
- Heat引擎请求nova使用cloud-init数据创建实例
- Nova选择一个计算节点来运行带有cloud-init数据的实例
- 当实例启动时,它运行cloud-init脚本
- 从元数据服务器下载数据
- 将多个部分拆分到/var/lib/cloud/目录中
- 运行不同的cloud-init部分(调整根文件系统大小,设置主机名,安装用户的SSH密钥等)
- 运行用户的脚本(位于/var/lib/cloud/data/cfn-userdata),它可以是任何类型的脚本(Bash、Python等),但在此脚本的某个点应该调用cfn-init。
- cfn-init加载/var/lib/cloud/data/cfn-init-data(AWS模板中的Metadata->AWS::CloudFormation::Init->Config属性的副本),可以安装软件包、设置用户和组、创建文件等。
请注意,heat-cfntools利用boto库,并且boto配置存储在实例上的/var/lib/heat-cfntools/cfn-boto-cfg中。
故障排除
如果您可以登录到实例,请查看以下文件
- /var/log/cloud-init.log => cloud-init日志
- /var/log/part-handler.log => Heat特定脚本的日志,用于管理content-type=text/x-cfninitdata的数据
- /var/log/heat-provision.log => 用户脚本的日志,包括cfn-init日志
您还可以查询元数据服务器以获取Heat生成的用户数据
curl -s http://169.254.169.254/2009-04-04/user-data
技巧与窍门
在实例内部获取私有IP地址
如果UserData脚本需要知道实例的私有IP地址,则无法通过Fn::GetAtt(instance, "PrivateIp")解析,因为它在Heat引擎解析UserData文件时不可用。相反,您的脚本可以从(Nova)元数据服务器获取该信息
curl -s http://169.254.169.254/latest/meta-data/local-ipv4
在Ubuntu云镜像上安装cfn工具
apt-get -y install python-argparse cloud-init python-psutil python-pip apt-get -y remove python-boto pip install 'boto==2.5.2' heat-cfntools cfn-create-aws-symlinks -s /usr/local/bin/