Aws lambda 地形环境和更新单个资源

Aws lambda 地形环境和更新单个资源,aws-lambda,terraform,Aws Lambda,Terraform,我使用Terraform连续部署lambda函数。lambda模块创建函数和初始别名[DEV、QA、PROD]。当进行更改时,源代码\u散列将更新,Terraform将更新代码。挑战在于,当我想将别名从DEV更新为QA时,它会更新整个堆栈。代码如下。谢谢你的帮助 $ cat main.tf module "sample" { source = "./lambda" name = "sample" runtime = "n

我使用Terraform连续部署lambda函数。lambda模块创建函数和初始别名[DEV、QA、PROD]。当进行更改时,
源代码\u散列
将更新,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}"
}

不同的环境需要不同的
tfvars
tfstate
文件

假设您使用最新的地形版本

创建一个环境文件夹(例如,
env
),并为每个环境设置
-backend.tf
.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

不同的环境需要不同的
tfvars
tfstate
文件

假设您使用最新的地形版本

创建一个环境文件夹(例如,
env
),并为每个环境设置
-backend.tf
.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

谢谢你的回复。挑战在于,对于这个用例,DEV、QA和PROD在同一个帐户中。最后,我使用Terraform管理lambda函数代码,并通过aws cli更新别名。再次感谢。我不明白你在说什么。当然,这些代码在同一个帐户中工作,您担心什么?谢谢您的回复。挑战在于,对于这个用例,DEV、QA和PROD在同一个帐户中。最后,我使用Terraform管理lambda函数代码,并通过aws cli更新别名。再次感谢。我不明白你在说什么。当然,这些代码在同一个帐户中工作,您担心什么?