2

我们已经使用 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?

谢谢你的帮助!

4

0 回答 0