创建将 UserData 传递给容器实例的 AWS Batch 托管计算环境

Posted

技术标签:

【中文标题】创建将 UserData 传递给容器实例的 AWS Batch 托管计算环境【英文标题】:Create AWS Batch Managed Compute Environment passing UserData to Container Instances 【发布时间】:2018-02-09 18:36:22 【问题描述】:

我想为AWS Batch 创建一个Managed Compute Environment,但使用EC2 User Data 来配置实例,因为它们被引入Batch 调度作业的ECS 队列。

没关系,但用户数据脚本的目的是将大型数据文件下载到 Docker 容器将引用的 InstanceStore。

这个is possible in ECS,但我找不到将用户数据传递到托管批处理计算环境的方法。

我最多可以指定 AMI。但是由于我们要使用托管,我们必须使用Amazon ECS-optimized AMI

我更喜欢使用EC2 User Data 作为解决方案,因为它为我们希望执行的任何其他引导程序提供了一个入口点。但我对其他黑客或解决方案持开放态度,只要它们适用于托管计算环境

【问题讨论】:

我想在这个问题中添加 amazon-batch 标签,但缺少代表 【参考方案1】:

您可以基于 AWS 提供的 AMI 创建一个 AMI,并对其进行自定义。由于 Batch 和/或 ECS 守护程序正在其上运行,因此仍将对其进行管理。

作为旁注,我正在尝试做同样的事情,但到目前为止还没有运气。我最终可能会创建一个自定义 AMI,并将配置脚本包含在 AMI 本身的 /etc/rc.local 中。不理想,但我认为 Batch 不能传递除了它需要的用户数据脚本。我还在调查这个。

【讨论】:

我已将此答案标记为正确,因为这也是我们的 AWS 解决方案架构师所建议的,而且它奏效了。【参考方案2】:

您可以创建一个包含您的用户数据的启动模板。然后将此启动模板分配给您的计算环境。请记住,您可能必须清理 AMI 中的 cloud init 目录,因为它可能已经启动过一次(在 ami 创建时)。 Launch template userguide

【讨论】:

这应该是正确的答案,尽管在撰写问题时@Ryan 的答案是我们使用的解决方法。 Launch 模板方法不需要重新处理他们的 AMI,可以在 CloudFormation 模板中获取变量,更适合自动化等。

以上是关于创建将 UserData 传递给容器实例的 AWS Batch 托管计算环境的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CloudFormation 将 UserData 传递给 Beanstalk 实例

AWS CDK - 如何将 Access Key Secret 和 Secret Key Id 作为 Env Param 传递给容器

如何使用 terraform 将 aws ec2 私有 ips 传递给模板文件

如何将AWS实例的详细信息传递给jenkins作业,以便该作业在实例中ssh和执行

AWS Cloudformation 上的 UserData 未部署在 EC2 实例上

如何将“–kubelet-extra-args”传递给 Terraform aws_eks_node_group 创建的 AWS EKS 节点组?