Как запустить terraform для загрузки нового лямбда-кода

Я развертываю лямбду с помощью Terraform следующим образом, но у меня есть следующие вопросы:

1) Я хочу, чтобы null_resource.lambda вызывался всегда или при изменении stop_ec2.py, чтобы stop_ec2_upload.zip не устарел. Что писать в триггерах {}?

2) как заставить aws_lambda_function.stop_ec2 обновлять новый файл stop_ec2_upload.zip в облако при изменении файла stop_ec2_upload.zip?

прямо сейчас мне нужно уничтожить aws_lambda_function.stop_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 = "..."
}

person user389955    schedule 02.02.2018    source источник


Ответы (2)


Я прочитал ссылку, предоставленную Чанданом, и понял. Вот мой код, и он отлично работает.

Фактически, с "archive_file" и source_code_hash мне не нужен триггер. всякий раз, когда я создаю новый файл stop_ec2.py или изменяю его. когда я запускаю 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             = "..."
}
person user389955    schedule 11.02.2018

Это может помочь:

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

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

ССЫЛКА: https://github.com/hashicorp/terraform/issues/8344

person Chandan Nayak    schedule 03.02.2018
comment
Спасибо, Чандан, я постараюсь сообщить тебе. - person user389955; 07.02.2018
comment
Привет, Чандан, я прочитал твою ссылку и выяснил ответ. см. мой пост ниже. Я не знаю, как работает ваш код. например Не знаю, что такое sha1Folder и requirements.txt. Но файл archive_file, указанный в предоставленной вами ссылке, работает хорошо. Спасибо! - person user389955; 12.02.2018