使用 terraform 启动 aws elb 实例

Posted

技术标签:

【中文标题】使用 terraform 启动 aws elb 实例【英文标题】:launching aws elb instace using terraform 【发布时间】:2021-11-15 15:13:10 【问题描述】:

我是 terraform 和 aws 的新手,我想做的就是启动一个 aws ec2 实例,该实例带有带有 terraform 的弹性负载均衡器。我从各个站点获得了一些配置示例,但不知道实现这些配置的正确方法是什么,文件夹结构应该是什么以及所有内容。我已经使用 aws 的 GUI 完成了它,但在 terraform 方面没有得到太多帮助。

这里的服务器应该是apache2

感谢任何帮助。

提前致谢

【问题讨论】:

您能否展示您的 TF 代码并解释为什么它不起作用?有什么错误吗? 我在link 获得了配置代码以及针对不同站点的更多选项,但不知道如何适应这个,基本上我想知道如何从 TF 开始。你能推荐一些我可以开始的网站吗?对不起,如果我不能说清楚我真正想要什么 如果您是 TF 新手,TF 文档有初学者教程。 learn.hashicorp.com/collections/terraform/aws-get-started 我也做了同样的事情,但是我知道我想给它添加负载均衡器(包括如何添加目标组和安全组)我该怎么做 【参考方案1】:

根据您创建弹性负载均衡器的要求,使用 terraform。您将需要创建以下资源。 如果您已经创建了 EC2 实例并且只想将它们附加到 ELB。

创建目标组 创建 ELB 将目标组分配给您的 ELB 将现有实例注册到目标组

如果您没有创建任何实例,

创建目标组 创建 ELB 将目标组分配给您的 ELB 创建启动模板/配置 创建 ASG,将 ELB 分配给 ASG 通过 ASG 创建的新实例将自动注册到 ELB 目标组。

Terraform 资源示例,

启动配置

resource "aws_launch_configuration" "Your_Launch_Configuration" 
  name                 = "launch_conf_name"
  instance_type        = "Instance_Type"
  image_id             = "AMI_image_id"
  key_name             = "Key_Name"
  security_groups      = "security_groups_id"
  user_data            = "User Data"
  iam_instance_profile = "Instance IAM Role"

Auto Scaling 组

resource "aws_autoscaling_group" "Your_ASG" 
  name                 = "ASG Name"
  launch_configuration = aws_launch_configuration.Your_Launch_Configuration.id
  max_size             = "Max size"
  min_size             = "Min Size"
  desired_capacity     = "Desired Capacity"
  vpc_zone_identifier  = "Your Subnet List"
  tags = [
    "key"                 = "Name"
    "value"               = "ASG Name"
    "propagate_at_launch" = true
  ]
  health_check_grace_period = "300"
  target_group_arns         = "set of your ELB target Group"

负载均衡器目标组

resource "aws_load_balancer_target_group" "Your_target_group" 
  name     = "Target_group_name"
  port     = "80"
  protocol = "HTTP"
  vpc_id   = "Your_vpcid"
  tags = 
    name = "Target_group_name"
  

  health_check 
    enabled  = true
    interval = 300  # health check interval
    protocol = "HTTP"  
    timeout  = 300  # timeout seconds
    path     = "/" # your health check path
  

负载平衡器

resource "aws_load_balancer" "your_load_balancer" 
  name               = load_balancer_name
  load_balancer_type = "application"
  internal           = true # if not internet facing
  subnets            = ["List of your subnet id"]
  security_groups    = ["List of your security group id"]

  tags = 
    "name" = load_balancer_Target_group_name
  

负载平衡器列表器

resource "aws_load_balancer_listener" "your_load_balancer_Listner" 
  load_balancer_arn = listner_load_balancer_arn   #arn of your load balancer
  port              = "80"
  protocol          = "http"

  default_action 
    target_group_arn = listner_Target_group_arn  # arn of your target group
    type             = "forward"
  

【讨论】:

谢谢,这就是我一直在寻找的。还有一件事,哪个应该放在哪个文件中以及如何链接所有这些,(文件夹结构应该是什么,哪个文件包含什么,这是主要关注点) 您可以将所有内容放在一个文件中,也可以将它们解耦到单独的文件中用于 ELB,另一个用于 ASG/启动配置。所有文件都应该在您执行 terraform 命令的工作/项目文件夹的根文件夹中,例如,如果您在 c:\workspace 中执行项目,请将所有文件保存在 c:\workspace 中。案例 1(两个不同的文件)c:\workspace -- ASG.tf -- ELB.tf 案例 2:(单个文件)c:\workspace -- main.tf(或任何文件名,但在单个文件中包含所有上述代码) 由于字符限制,在第二条评论中粘贴,引用数据非常容易,例如我们必须在 ASG 中指定启动配置,为此只需提供参考,例如,launch_configuration = aws_launch_configuration.Your_Launch_Configuration。 id 即 ..id/arn/name 等。您可以输出的这些属性列表位于 terraform 站点上。您可以根据您的要求选择它们。

以上是关于使用 terraform 启动 aws elb 实例的主要内容,如果未能解决你的问题,请参考以下文章

使用Terraform部署代码和管理配置

Terraform如何获取aws_lb的IP地址

Terraform ELB S3 权限问题

当您的实例位于 ELB 之后时,您如何为 AWS 建立维护页面?

定义:Terraform - AWS - aws_instance - user_data

Terraform aws_autoscaling_group 启动的 AWS EC2 实例的动态命名