这就是我想要做的。我的 cfn 模板将用于启动不同类型的 EC2 实例:微型、大型等。
但是根据该实例类型的核心数量,我想在 userdata 脚本部分做一些不同的事情。
我愿意:
- 以编程方式找出模板内的核心数量或
- 将核心数作为输入参数传递给模板。
话虽如此,这是我的两个问题:
是否可以从模板中查询系统以获取核心数?如果是的话,有人可以告诉我怎么做吗?
但更重要的是,是否可以在模板的 userdata 部分使用该值?
PS:我也在 AWS 论坛上问过同样的问题。
这就是我想要做的。我的 cfn 模板将用于启动不同类型的 EC2 实例:微型、大型等。
但是根据该实例类型的核心数量,我想在 userdata 脚本部分做一些不同的事情。
我愿意:
话虽如此,这是我的两个问题:
是否可以从模板中查询系统以获取核心数?如果是的话,有人可以告诉我怎么做吗?
但更重要的是,是否可以在模板的 userdata 部分使用该值?
PS:我也在 AWS 论坛上问过同样的问题。
我不知道以编程方式发现这一点的任何方法[但见下文],但您当然可以将参数的值插入用户数据部分。这是一个例子:
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 所需的 base 64 编码字符串。
"Fn::Join"
接受两个参数:一个要在要加入的字符串之间插入的字符串(这里是一个空字符串),以及要加入的字符串数组。其他字符串中间的"Ref"
对象被参数的值替换。
编辑添加:我不知道如何获取核心数,但是您可以使用命令获取 AWS 实例类型
curl http://169.254.169.254/latest/meta-data/instance-type
这将返回一个字符串,如t1.micro
,m1.large
等。您可以使用 AWS 文档来确定该实例类型具有多少核心。但是,我不知道您可以在模板中使用此结果的任何方式。您可以编写一个 shell 脚本,在 UserData 部分执行您需要的任何操作。