定义: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 资源中使用“计数”