定义:Terraform - AWS - aws_instance - user_data

Posted

技术标签:

【中文标题】定义:Terraform - AWS - aws_instance - user_data【英文标题】:Define: Terraform - AWS - aws_instance - user_data 【发布时间】:2019-06-28 20:17:52 【问题描述】:

我正在使用 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

...

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

【问题讨论】:

【参考方案1】:

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 以及将运行什么 init 命令。初始化命令保存在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

【讨论】:

查看我的更新 (docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/…),这是您需要阅读的内容。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于定义:Terraform - AWS - aws_instance - user_data的主要内容,如果未能解决你的问题,请参考以下文章

AWS Beanstalk Tomcat 和 Terraform

terraform - 从文件中定义 aws api 网关请求参数?

schedult 上的 aws 自定义事件以触发 lambda 使用 Terraform

在 aws_route53_record terraform 资源中使用“计数”

如何使用 Terraform 将现有的“aws_route53_record”CNAME 更新/修改为 ALIAS

为啥我使用 terraform 资源 aws_route53_record 创建的 Route53 记录无法公开解析?