如何重构创建 vpc 的 terraform 模块?

问题描述 投票:0回答:1

我在这里找到了一个使用 terraform 在 aws 上部署 ML 流的示例:https://github.com/Glovo/terraform-aws-mlflow/blob/master/terratest/examples/main.tf。问题是它声明了一个“vpc”模块,而且最新版本的 terraform (v 1.4.6) 似乎已弃用它。 vpc 是这样声明的

    module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "2.44.0"

  name               = "mlflow-${random_id.id.hex}"
  cidr               = "10.0.0.0/16"
  azs                = ["eu-west-1a", "eu-west-1b", "eu-west-1c"]
  private_subnets    = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  public_subnets     = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
  database_subnets   = ["10.0.201.0/24", "10.0.202.0/24", "10.0.203.0/24"]
  enable_nat_gateway = true

  tags = {
    "built-using" = "terratest"
    "env"         = "test"
  }
}

然后在mlf流模块中引用vpc:

module "mlflow" {
  source = "../../"

  unique_name = "mlflow-terratest-${random_id.id.hex}"
  tags = {
    "owner" = "terratest"
  }
  vpc_id                            = module.vpc.vpc_id
  database_subnet_ids               = module.vpc.database_subnets
  service_subnet_ids                = module.vpc.private_subnets
  load_balancer_subnet_ids          = var.is_private ? module.vpc.private_subnets : module.vpc.public_subnets
  load_balancer_ingress_cidr_blocks = var.is_private ? [module.vpc.vpc_cidr_block] : ["0.0.0.0/0"]
  load_balancer_is_internal         = var.is_private
  artifact_bucket_id                = var.artifact_bucket_id
  database_password_secret_arn      = aws_secretsmanager_secret_version.db_password.secret_id
  database_skip_final_snapshot      = true
}

我的猜测是我必须使用 vpc 的资源声明而不是模块来重构它。我不明白的是为什么子网在vpc模块中声明为字符串列表,然后分配给ml流模块中的子网id变量?我将如何在最新版本的 Terraform 中执行此操作?

任何帮助将不胜感激。

amazon-ec2 terraform amazon-vpc mlflow
1个回答
1
投票

你不需要重构那个模块,只需将版本更新到最新版本(4.0.2)你使用的是一个非常旧的版本。 建议:
每次看到模块调用 Terraform 仓库时,请转到 Terraform 注册表并检查版本、文档和官方示例/仓库。
https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/4.0.2

© www.soinside.com 2019 - 2024. All rights reserved.