我正在与Terraform合作,启动ECS集群。
我正在使用别人编写的脚本。除了这一点之外,我了解大多数启动配置脚本:
我正在尝试查找自动扩展组和ECS集群之间的链接。
我有一个aws_autoscaling_group
,它使用aws_launch_configuration
(请参见下文)。
aws_launch_configuration
有一个user_data
参数。这是自动伸缩组和群集之间的唯一链接。
查看文档的链接(底部),对于user_data
是什么并没有给出很好的解释。有人可以帮我了解user_data
如何将自动伸缩组与群集链接,并尽可能给出一些示例或链接,以说明其通常的用途和用法。
...
resource "aws_launch_configuration" "ecs_host" {
...
user_data = <<EOF
#!/bin/bash
echo ECS_CLUSTER=${var.cluster_name} >> /etc/ecs/ecs.config
EOF
}
...
地形应用输出:
...
+ aws_launch_configuration.ecs_host
...
user_data: "4e27e8feea0896af43ada0c647877da3766f5dcb"
...
https://www.terraform.io/docs/providers/aws/r/instance.html#user_data https://www.terraform.io/docs/providers/aws/r/launch_configuration.html#user_data
答案 0 :(得分:2)
official explanation by terraform
const arrEmulation = {0:0, 1:1, 2:2, 3:3, 4:4, 5:5, length: 6};
const newArray = Array.from(arrEmulation) // [0, 1, 2, 3, 4, 5]
Array.isArray(newArray) // true
aws官方文档解释什么是user_data - (Optional) The user data to provide when launching the instance. Do not pass gzip-compressed data via this argument; see user_data_base64 instead.
https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html
因此,通常,在定义启动配置和自动扩展组之后,自动扩展组将确保需要启动多少个ec2实例(所需容量)。
启动新实例时,它将引用启动配置,该配置定义实例的哪个AWS AMI以及将运行的init命令。初始化命令将保存在user_data
脚本中。
在您的情况下,用户数据脚本会将自己注册到指定的ECS群集。因此ecs群集可以轻松发现这些ec2实例
user_data
在后台,有一个名为echo ECS_CLUSTER=${var.cluster_name} >> /etc/ecs/ecs.config
的docker容器正在运行,以帮助这些注册并管理其他容器(ecs服务)
如果您想了解详细信息,可以阅读以下文档:https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-install.html
答案 1 :(得分:1)
user_data
属性允许您指定脚本有效负载或云守护程序指令。数据可以是脚本的内联模板,也可以是需要处理Template Provider的文件模板。
因此,当您要创建用于自动伸缩组的新启动配置时,这是在此处执行脚本的一种选择,并且可以将输出作为群集的哈希值。
限制是您不能通过此参数传递gzip压缩的数据;请参阅user_data_base64,并且您不应该将敏感数据(例如密码)存储为用户数据。
答案 2 :(得分:1)
简单地放置用户数据是在引导ec2实例时运行的脚本。您可以自动执行为确保正确配置ec2而需要执行的操作,并将它们指定为user_data,指示aws在计算机引导程序上运行脚本。