我们已经使用 Openstack (essex) 和Heat建立了一个本地云环境。但是我们面临的问题是我们想在第一次启动实例时添加额外的文件/包。据我所知,这可以通过AWS::CloudFormation::Init完成。
但是当通过执行产生一个新实例时
热创建测试--template-file=test.template
使用以下简约模板
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Create and provision a web server",
"Resources": {
"NewServer": {
"Type": "AWS::EC2::Instance",
"Properties": {
"ImageId": "fedora18ami_neu",
"InstanceType": "m1.large",
"KeyName": "poc",
"UserData": {
"Fn::Base64": "#!/bin/sh\n/opt/aws/bin/cfn-init -s test--region RegionOne -r NewServer\n"
}
},
"Metadata": {
"AWS::CloudFormation::Init": {
"config": {
"packages": {
"yum": {
"httpd": []
}
}
}
}
}
}
}
}
我们得到了错误:
File "/usr/lib/python2.7/site-packages/cfnbootstrap/aws_client.py", line 149, in sign
derived_key = hmac.new(("AWS4" + creds.secret_key).encode('utf-8'), timestamp_short.encode('utf-8'), hashlib.sha256).digest()
TypeError: cannot concatenate 'str' and 'NoneType' objects
似乎 cfn-init 正在尝试连接到某些亚马逊云服务,并且需要凭据才能执行该操作!?为什么它需要连接到 Amazon-Services,有没有可能避免它?还是有另一种方法可以在模板中实现AWS::CloudFormation::Init的功能?我是否必须在 UserData-Element 中将所有内容都声明为 Shellscript?
谢谢你的帮助!