定义:Terraform - AWS - aws_instance - user_data

Define: Terraform - AWS - aws_instance - user_data

我正在使用 Terraform,启动 ECS 集群。

我正在使用别人编写的脚本。我了解大部分启动配置脚本,除了这一点:

我正在尝试找到自动缩放组和 ECS 集群之间的 link。

我有一个 aws_autoscaling_group,它使用 aws_launch_configuration(见下文)。 aws_launch_configuration 有一个 user_data 参数。这是我能找到的自动缩放组和集群之间唯一的link。

查看文档的 links(底部),它没有对 'what' user_data 给出很好的解释。有人可以帮我理解 "how" user_data link 集群的自动缩放组,如果可能的话,请给出一些示例或 link 它通常用于什么以及它通常如何使用。

...
resource "aws_launch_configuration" "ecs_host" {
  ...

  user_data = <<EOF
#!/bin/bash
echo ECS_CLUSTER=${var.cluster_name} >> /etc/ecs/ecs.config
EOF
}
...

terraform 应用输出:

  ...
  + 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

official explanation by terraform

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.

aws 官方文档解释什么是user_data

https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html

所以一般来说,在您定义启动配置和自动缩放组后,自动缩放组将确定需要启动多少个 ec2 实例(所需容量)。

当启动一个新实例时,它将引用启动配置,它定义了实例的 AWS AMI 和初始化命令 运行。初始化命令保存在 user_data 脚本中。

在您的情况下,用户数据脚本将自身注册到指定的 ECS 集群。所以ecs集群可以轻松发现这些ec2实例

echo ECS_CLUSTER=${var.cluster_name} >> /etc/ecs/ecs.config

在后台,有一个名为 amazon/amazon-ecs-agent 运行 的 docker 容器帮助这些注册和管理其他容器(ecs 服务)

如果想了解详情,可以翻阅这个文档:https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-install.html

user_data 属性允许您指定脚本负载或云守护程序指令。数据可以是内联模板,如您所用的脚本,或您需要处理的文件模板 Template Provider。 因此,当您想要创建一个新的启动配置时,用于自动缩放组,这是在此处执行脚本的选项之一,并将输出作为集群的哈希值。

限制是您不能通过此参数传递 gzip 压缩的数据;请参阅 user_data_base64,您不应将敏感数据(例如密码)存储为用户数据。

简单地说,用户数据是 运行 在 bootstrapping ec2 实例时的脚本。您可以自动执行确保正确配置 ec2 所需的操作,并将它们指定为 user_data,指示 aws 运行 机器 bootstrap 上的脚本。