定义:Terraform-AWS-aws_instance-user_data

时间:2019-02-05 02:57:47

标签: amazon-web-services amazon-ec2 terraform autoscaling

我正在与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

3 个答案:

答案 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在计算机引导程序上运行脚本。