jenkins 针对特定环境的不同Terraform计划

tcomlyy6  于 2023-06-28  发布在  Jenkins
关注(0)|答案(1)|浏览(127)

我需要传递给Terraform应用特定的环境变量,如dev,prod,从 *.tfstate文件登台。到目前为止,我所做的是为它们创建3个工作区和变量。在variables.tf文件中,我有:
我的文件夹结构是:

dev.tfvars
prod.tfvars
staging.tfvars
main.tf
variables.tf

variables.tf

variable "env_dev" {
  type    = string
}

variable "env_prod" {
  type    = string
}

variable "env_staging" {
  type    = string
}

在 *.tfvars for dev,prod and staging中,我有:

env_dev = "dev"
env_prod = "prod"
env_staging = "staging"

我想要实现的是为特定环境更新lambda别名,而不是同时更新所有的lambda别名:

resource "aws_lambda_alias" "prod_lambda_alias" {
  name     = var.env_dev
  description      = "Release candidate -"
  function_name    = var.function_name
  function_version = aws_lambda_function.payload.version
}

resource "aws_lambda_alias" "dev_lambda_alias" {
  name             = var.env_dev
  description      = "Release candidate - "
  function_name    = var.function_name
  function_version = var.function_version != "" ? var.function_version : "$LATEST"
}

resource "aws_lambda_alias" "staging_lambda_alias" {
  name             = var.env_staging
  description      = "Release candidate - "
  function_name    = var.function_name
  function_version = aws_lambda_function.payload.version
}

对于要为特定工作空间使用导出的管道,下面是针对dev的:

export TF_WORKSPACE=dev

然后使用Terraform应用如下应用更改:

terraform apply plan.out

我想只对特定资源应用更改。示例:如果我想更新dev“resource aws_lambda_alias”“dev_lambda_alias”,只更新其中一个资源,而不更新其他2个资源,用于生产和暂存。
问候

yrdbyhpb

yrdbyhpb1#

如果别名的名称将与工作区的名称相同,则应该这样做:

resource "aws_lambda_alias" "lambda_alias" {
  name             = terraform.workspace
  description      = "Release candidate -"
  function_name    = var.function_name
  function_version = terraform.workspace == "dev" ? "$LATEST" : aws_lambda_function.payload.version
}

有关terraform.workspace语法的更多信息可以在文档中找到。

相关问题