簡體   English   中英

terraform 未檢測到 lambda 源文件的更改

[英]terraform does not detect changes to lambda source files

在我的main.tf中,我有以下內容:

data "template_file" "lambda_script_temp_file" {
  template = "${file("../../../fn/lambda_script.py")}"
}

data "template_file" "library_temp_file" {
  template = "${file("../../../library.py")}"
}

data "template_file" "init_temp_file" {
  template = "${file("../../../__init__.py")}"
}

data "archive_file" "lambda_resources_zip" {
  type        = "zip"
  output_path = "${path.module}/lambda_resources.zip"

  source {
    content   = "${data.template_file.lambda_script_temp_file.rendered}"
    filename  = "lambda_script.py"
  }

  source {
    content   = "${data.template_file.library_temp_file.rendered}"
    filename  = "library.py"
  }

  source {
    content   = "${data.template_file.init_temp_file.rendered}"
    filename  = "__init__.py"
  }
}

resource "aws_lambda_function" "MyLambdaFunction" {
  filename          = "${data.archive_file.lambda_resources_zip.output_path}"
  function_name     = "awesome_lambda"
  role              = "${var.my_role_arn}"
  handler           = "lambda_script.lambda_handler"
  runtime           = "python3.6"
  timeout           = "300"
}

問題是當我修改其中一個源文件時,比如lambda_script.py ,在新的terraform apply上,即使存檔文件( lambda_resources_zip )得到更新, lambda 函數的腳本也沒有得到更新(新的存檔文件沒有得到上傳)。

我知道為了避免這種情況,我可以先運行terraform destroy但這不是我的用例的選項。

*我正在使用 Terraform v0.11.10

我通過將以下行添加到資源定義中解決了該問題:

source_code_hash  = "${data.archive_file.lambda_resources_zip.output_base64sha256}"

修改源文件后,哈希值將更改並觸發要更新的源文件。

這對我有用 -

  • 添加這一行
source_hash     = "${data.archive_file.source.output_base64sha256}"

s3 lambda bucket ,這將告訴您是否進行了任何更改。

  • 然后將其添加到 lambda -
source_code_hash = "${data.archive_file.source.output_base64sha256}"

所以你的代碼應該是這樣的 -

resource "aws_s3_object" "lambda_object" {
  source_hash     = "${data.archive_file.source.output_base64sha256}"
  bucket          = "${aws_s3_bucket.s3.bucket}"
  key             = "${var.key}"
  source          = data.archive_file.source.output_path
}

resource "aws_lambda_function" "lambda_" {
  function_name   = "lambda_name"
  source_code_hash = "${data.archive_file.source.output_base64sha256}"
  .......
  .......
}

為我工作。 最良好的祝願。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM