首页 > 解决方案 > Terraform 没有上传新的 ZIP

问题描述

我想使用 Terraform 来部署我的 lambda 函数。我做了类似的事情:

provider "aws" {
    region = "ap-southeast-1"
}

data "archive_file" "lambda_zip" {
    type = "zip"
    source_dir = "src"
    output_path = "build/lambdas.zip"
}

resource "aws_lambda_function" "test_terraform_function" {
    filename = "build/lambdas.zip"
    function_name = "test_terraform_function"
    handler = "test.handler"
    runtime = "nodejs8.10"
    role = "arn:aws:iam::000000000:role/xxx-lambda-basic"
    memory_size = 128
    timeout = 5
    source_code_hash = "${data.archive_file.lambda_zip.output_base64sha256}"
    tags = {
        "Cost Center" = "Consulting"
        Developer = "Jiew Meng"
    }
}

我发现当 test.js 没有变化时,terraform 正确检测到没有变化

No changes. Infrastructure is up-to-date.

当我更改 test.js 文件时,terraform 确实检测到更改:

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  ~ aws_lambda_function.test_terraform_function
      last_modified:    "2018-12-20T07:47:16.888+0000" => <computed>
      source_code_hash: "KpnhsytFF0yul6iESDCXiD2jl/LI9dv56SIJnwEi/hY=" => "JWIYsT8SszUjKEe1aVDY/ZWBVfrZYhhb1GrJL26rYdI="

它确实压缩了新的 zip,但是,它似乎没有用新的 ZIP 更新功能。似乎它认为因为文件名没有变化,所以它没有上传......我该如何解决这种行为?

=====

按照这里的一些答案,我尝试了:

而且它没有更新......为什么会这样?

标签: amazon-web-servicesaws-lambdaterraform

解决方案


我遇到了同样的问题,为我解决的问题是使用publish 参数自动发布 Lambda 函数。为此,只需publish = true在您的aws_lambda_function资源中设置。

请注意,您的函数将在此之后进行版本控制,并且每次更改都会创建一个新的。qualified_arn因此,如果您在任何其他 Terraform 代码中引用该函数,则应确保使用属性引用。


推荐阅读