定义: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 上的脚本。
我正在使用 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 上的脚本。