Amazon web services 如何触发terraform上传新的lambda代码

Amazon web services 如何触发terraform上传新的lambda代码,amazon-web-services,aws-lambda,terraform,Amazon Web Services,Aws Lambda,Terraform,我使用Terraform部署lambda如下,但有以下问题: 1) 我希望总是调用null_resource.lambda,或者在更改stop_ec2.py时调用null_resource.lambda,以便stop_ec2_upload.zip不会过期。我应该在触发器{}中写什么 2) 如何使aws_lambda_function.stop_ec2在stop_ec2_upload.zip更改时将新的stop_ec2_upload.zip更新到云 现在我必须销毁aws_lambda_函数。停止e

我使用Terraform部署lambda如下,但有以下问题:

1) 我希望总是调用null_resource.lambda,或者在更改stop_ec2.py时调用null_resource.lambda,以便stop_ec2_upload.zip不会过期。我应该在触发器{}中写什么

2) 如何使aws_lambda_function.stop_ec2在stop_ec2_upload.zip更改时将新的stop_ec2_upload.zip更新到云

现在我必须销毁aws_lambda_函数。停止ec2,然后再次创建它。我可以在代码中写些什么,这样当我运行terraform apply时,1)和2)会自动发生吗

resource "null_resource" "lambda" {
  triggers {
   #what should I write here?
  }

  provisioner "local-exec" {
    command = "mkdir -p lambda_func && cd lambda_py && zip     
../lambda_func/stop_ec2_upload.zip stop_ec2.py && cd .."
  }
}
resource "aws_lambda_function" "stop_ec2" {
    depends_on = ["null_resource.lambda"]
    function_name = "stopEC2"
    handler = "stop_ec2.handler"
    runtime = "python3.6"
    filename = "lambda_func/stop_ec2_upload.zip"
    source_code_hash =     
"${base64sha256(file("lambda_func/stop_ec2_upload.zip"))}"
    role = "..."
}
这些可能有助于:

triggers {
    main         = "${base64sha256(file("source/main.py"))}"
    requirements = "${base64sha256(file("source/requirements.txt"))}"
  }

triggers = {
    source_file = "${sha1Folder("${path.module}/source")}"
  }

参考:

我阅读了Chandan提供的链接,并找到了答案。 这是我的代码,它工作得很好

事实上,使用“归档文件”和源代码散列,我不需要触发器。每当我创建新文件时,停止或修改它。当我运行terraform时,文件将被重新压缩并上传到云

data "archive_file" "stop_ec2" {
  type        = "zip"
  source_file = "src_dir/stop_ec2.py"
  output_path = "dest_dir/stop_ec2_upload.zip"
}

resource "aws_lambda_function" "stop_ec2" {
  function_name    = "stopEC2"
  handler          = "stop_ec2.handler"
  runtime          = "python3.6"
  filename         = "dest_dir/stop_ec2_upload.zip"
  source_code_hash =     
"${data.archive_file.stop_ec2.output_base64sha256}"
  role             = "..."
}

谢谢Chandan,我会尽力让你知道的。嗨Chandan,我读了你的链接,找到了答案。见下面我的帖子。我不知道你的代码是如何工作的。e、 g.我不知道sha1Folder和requirements.txt是什么。但是在您提供的链接中引入的归档文件效果很好。谢谢