本地exec未检测到lambda源代码更改



我已经用本地exec provisioner创建了一个null资源,该资源运行一个shell脚本来获取lambda源代码所需的文件夹。

resource "null_resource" "lambda-repo" {  
triggers = {
#not sure on this
}
provisioner "local-exec" {  
command = "bash lambda-repo.sh"
working_dir = "${path.module}"
}
}
data "archive_file" "lambda-repo-file" {
depends_on = [null_resource.lambda-repo]
type = "zip"
source_dir  = "${path.module}/lambda_archive/lambda-repo"
output_path = "${path.module}/lambda_archive/lambda-repo.zip"
}

和如下所示的shell脚本

#!/bin/sh
mkdir -p lambda_archive/lambda-repo/lambdasfolder/common
mkdir -p lambda_archive/lambda-repo/lambdasfolder/oob_check_challenge
touch lambda_archive/lambda-repo/lambdasfolder/__init__.py
cp -r ../src/lambdasfolder/common/. lambda_archive/lambda-repo/lambdasfolder/common
cp -r ../src/lambdasfolder/lambda1folder/. lambda_archive/lambda-repo/lambdasfolder/lambda1folder

为了在最初的地形应用中实现这一点,我需要对s3对象中的etag进行注释。

resource "aws_s3_object" "lambda-repo" {
bucket = aws_s3_bucket.lambda-repo.id
key    = "lambda-repo.zip"
source = data.archive_file.lambda-repo-file.output_path
#had to comment etag 
#etag = filemd5(data.archive_file.lambda-repo-file.output_path)
}

对于第一个terraform应用程序,上面的terraform脚本通过将所需的源代码上传到lambda而运行良好。

现在的问题是,在第一次运行后执行terraform apply时,它没有检测到lambda函数的任何更改。如何在null_resource中编写触发器来检测目录中的任何文件更改?

如果您想始终为每个apply执行local-exec,您可以执行以下操作:

resource "null_resource" "lambda-repo" {  
triggers = {
always_run = timestamp()
}
provisioner "local-exec" {  
command = "bash lambda-repo.sh"
working_dir = "${path.module}"
}
}

但是,如果您想在创建lambda_handler.py的新版本后运行local-exec,您可以执行(lambda_handler.py是示例名称(:

resource "null_resource" "lambda-repo" {  
triggers = {
always_run = md5(file("../src/lambdasfolder/common/lambda_handler.py"))
}
provisioner "local-exec" {  
command = "bash lambda-repo.sh"
working_dir = "${path.module}"
}
}

lambda_handler.py应该替换为实际处理程序文件的名称。因此,当其内容改变时,md5将不同,从而触发local-exec

相关内容

  • 没有找到相关文章

最新更新