我可以在Userdata脚本中访问cfn输入参数变量吗?

时间:2013-03-03 02:03:46

标签: amazon-web-services amazon-ec2 amazon-cloudfront

这是我想要做的。我的cfn模板将用于启动不同类型的EC2实例。微,大等等

但是根据该实例类型的核心数量,我想在userdata脚本部分中以不同的方式做某些事情。

我愿意接受: 1.在模板中以编程方式查找核心数 要么 2.将核心数作为输入参数传递给模板。

话虽如此,这是我的两个问题:

  1. 是否可以从模板中查询系统以获取核心数?如果是,有人可以告诉我怎么做?

  2. 但更重要的是,是否可以在模板的userdata部分使用此值?

  3. 我真的很感激任何指向正确的方向。

    - 苏

    PS:我也在aws论坛上问了同样的问题。

1 个答案:

答案 0 :(得分:0)

我不知道有任何方式以编程方式发现[但见下文],但您当然可以将参数的值插入userdata部分。这是一个例子:

UserData: {
  "Fn::Base64": {
    "Fn::Join: [
      "",
      [
        "all of the script up to the missing value",
        {"Ref": "NumberOfCoresParameterName"},
        "all of the script after the missing value"
      ]
    ]
  }
}

在示例中,"NumberOfCoresParameterName是您为插入值的参数指定的名称。

"Fn::Base64"函数将其值转换为UserData所需的基本64位编码字符串。

"Fn::Join"有两个参数:一个在你要加入的字符串之间插入的字符串(这里是一个空字符串)和一个要连接的字符串数组。其他字符串中间的"Ref"对象将替换为参数值。

编辑添加:我不知道如何获取核心数,但您可以使用命令获取AWS实例类型

curl http://169.254.169.254/latest/meta-data/instance-type

这将返回类似t1.microm1.large等字符串。您可以使用AWS文档来确定实例类型具有的核心数。但是,我不知道您是否可以在模板中使用此结果。您可以编写一个shell脚本,在UserData部分中执行您需要的任何操作。