【问题标题】:terraform environments and updating a single resourceterraform 环境和更新单个资源
【发布时间】:2017-09-21 20:24:39
【问题描述】:

我正在使用 Terraform 持续部署 lambda 函数。 lambda 模块创建函数和初始别名 [DEV,QA,PROD]。当进行更改时,source_code_hash 会更新,Terraform 会更新代码。挑战在于,当我想将别名从 DEV 更新为 QA 时,它会更新整个堆栈。代码如下。感谢您的帮助。

$ cat main.tf

module "sample" {
  source           = "./lambda"
  name             = "sample"
  runtime          = "nodejs6.10"
  role             = "${aws_iam_role.iam_role_for_lambda.arn}"
  filename         = "../Archive.zip"
  source_code_hash = "${base64sha256(file("../Archive.zip"))}"
  source_dir       = "../sample"
  alias            = "${var.env_name}"
}

$ cat module/main.tf
resource "aws_lambda_function" "lambda" {
  filename         = "${var.filename}"
  function_name    = "${var.name}"
  role             = "${var.role}"
  handler          = "${var.name}.${var.handler}"
  runtime          = "${var.runtime}"
  source_code_hash = "${data.archive_file.lambda_zip.output_base64sha256}"
  publish          = "true"
}

resource "aws_lambda_alias" "lambda_alias" {
  count = "2"
  name  = "${element(var.alias, count.index)}"

  #name             = "${var.alias}"
  description      = "${var.name}"
  function_name    = "${aws_lambda_function.lambda.arn}"
  function_version = "${aws_lambda_function.lambda.version}"
}

【问题讨论】:

    标签: aws-lambda terraform


    【解决方案1】:

    对于不同的环境,您需要不同的 tfvarstfstate 文件。

    假设您使用最新的 terraform 版本。

    创建环境文件夹(例如env)并为每个环境设置<env>-backend.tf<env>.tfvars文件

    $ cat main.tf
    
    terraform {
      required_version = ">= 0.9.1"
    
      backend "s3" {
        encrypt = "true"
      }
    }
    
    $ cat env/dev-backend.tf
    
    bucket = "terraform-<change-to-s3-global-unique-id>"
    
    key = "terraform/dev/terraform.tfstate"
    
    kms_key_id = "xxxx-xxxx-xxxx-xxxx"
    
    
    $ cat env/dev.tfvars
    
    env_name = dev
    

    对 qa 和 prod 环境执行相同操作。

    所以你应该没问题运行下面的命令来获得相同的lambda tf 代码在不同的环境中工作

    rm -rf .terraform    
    export env="dev"
    terraform init -backend=true -backend-config=env/${env}-backend.tf
    terraform plan -var-file=./env/${env}.tfvars
    

    【讨论】:

    • 感谢您的回复。挑战在于,对于这个用例,DEV、QA 和 PROD 在同一个帐户中。我最终做的是使用 Terraform 来管理 lambda 函数代码并通过 aws cli 更新别名。再次感谢。
    • 不明白你在说什么。当然,代码在同一个帐户中有效,您担心什么?
    猜你喜欢
    • 2022-01-23
    • 2021-02-19
    • 2021-03-03
    • 1970-01-01
    • 2021-02-18
    • 2021-12-08
    • 1970-01-01
    • 2017-11-11
    • 2020-09-21
    相关资源
    最近更新 更多