这是我想要做的。我的cfn模板将用于启动不同类型的EC2实例。微,大等等
但是根据该实例类型的核心数量,我想在userdata脚本部分中以不同的方式做某些事情。
我愿意接受: 1.在模板中以编程方式查找核心数 要么 2.将核心数作为输入参数传递给模板。
话虽如此,这是我的两个问题:
是否可以从模板中查询系统以获取核心数?如果是,有人可以告诉我怎么做?
但更重要的是,是否可以在模板的userdata部分使用此值?
我真的很感激任何指向正确的方向。
- 苏
PS:我也在aws论坛上问了同样的问题。
答案 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.micro
,m1.large
等字符串。您可以使用AWS文档来确定实例类型具有的核心数。但是,我不知道您是否可以在模板中使用此结果。您可以编写一个shell脚本,在UserData部分中执行您需要的任何操作。