Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
第 3 步:创建启动模板并将其附加到计算环境
当实例启动时,user-data脚本会自动安装Fluent Bit,从 IMDSv2 检索实例 ID,从 Amazon S3 同步配置,然后启动服务。Fluent Bit有关启动模板的更多信息,请参阅将 Amazon EC2 启动模板与 Amazon Batch。有关 IMDS 配置的更多信息,请参阅实例元数据服务(IMDS)配置。
有关示例user-data脚本,请参阅配套 GitHub 存储库。使用该launch-template-userdata-minimal.txt文件作为启动模板。此文件不包括注释以减user-data小大小。该launch-template-userdata.txt文件是注释版本,仅供参考。使用前请替换模板中的以下占位符:
先决条件
- Amazon Console
-
创建启动模板:
打开位于 https://console.aws.amazon.com/ec2/ 的 Amazon EC2 控制台。
在导航窗格中,选择 Launch Templates。
选择Create launch template(创建启动模板)。
在 “启动模板名称” 中,输入一个名称,例如batch-host-logs。
展开高级详细信息。
对于 Metadata version(元数据版本),选择 V2 only (token required)(仅限 V2(需要令牌))。
对于元数据响应跳数限制,请输入2。
滚动到用户数据并粘贴配套 GitHub 存储库中的user-data脚本。将 <BUCKET_NAME>替换为存储桶名称。<FLUENT_BIT_VERSION>替换为所需的Fluent Bit版本,或将最新版本留空。
选择Create launch template(创建启动模板)。
创建计算环境:
在处打开 Amazon Batch 控制台https://console.aws.amazon.com/batch/。
在导航窗格中,选择计算环境。
选择创建。
在计算环境的配置中,选择 Amazon Elastic Compute Cloud (Amazon EC2)。
对于编排类型,请选择托管。
对于 “名称”,输入一个名称,例如my-host-logs-ce。
对于实例角色,选择您在步骤 2 中更新或创建的实例角色,例如ecsInstanceRole。
选择下一步。
在实例配置下,展开启动模板并选择您创建的模板。
填写其余字段,然后选择创建计算环境。
- Amazon CLI
-
创建启动模板。将user-data脚本从配套 GitHub 存储库保存到文件中,然后使用 base64 对其进行编码:
aws ec2 create-launch-template \
--launch-template-name batch-host-logs \
--launch-template-data '{
"MetadataOptions": {
"HttpTokens": "required",
"HttpPutResponseHopLimit": 2
},
"UserData": "BASE64_ENCODED_USER_DATA"
}'
使用启动模板创建计算环境:
aws batch create-compute-environment \
--compute-environment-name my-host-logs-ce \
--type MANAGED \
--compute-resources '{
"type": "EC2",
"minvCpus": 0,
"maxvCpus": 256,
"instanceTypes": ["optimal"],
"subnets": ["subnet-12345678"],
"securityGroupIds": ["sg-12345678"],
"instanceRole": "arn:aws:iam::111122223333:instance-profile/ecsInstanceRole",
"launchTemplate": {
"launchTemplateName": "batch-host-logs",
"version": "$Latest"
}
}'
元数据响应跳数限制在启动模板2中设置为,因为在作业容器中运行的应用程序需要额外的网络跳数才能到达 IMDSv2 端点。如果没有此设置,来自容器的 IMDSv2 请求将失败。