Лямбда-функция не будет обновлена только из-за изменения файла в корзине S3.
Аналогично идее CloudFormation, как в AWS :: Lambda :: Код функции
Изменения в пакете развертывания в Amazon S3 не обнаруживаются автоматически во время стек обновлений. Чтобы обновить код функции, измените ключ объекта или версию в шаблоне.
В моем понимании, мы не знали бы, какой лямбда-код мы выполняем, если функция Lambda автоматически регистрирует изменения в S3. ведро. Как правильное управление выпуском, мы должны иметь возможность явно выпускать новое лямбда-развертывание (лучше избегать использования $ LATEST, но publi sh).
Необходимо запустить обновление лямбда-функции.
Одним из способов является использование атрибута source_code_ha sh ресурса Terraform aws_lambda_function, но файл должен быть локальным, а не S3, и его необходимо изменить, прежде чем запускать terraform.
Или измените местоположение объекта корзины S3 и установите новый путь к атрибуту s3_key функции aws_lambda_function. Например, для каждого нового выпуска создайте новую папку S3 "v1", "v2", "v3", ... и используйте новую папку (а также обновите псевдоним, предпочтительно).
resource "aws_lambda_function" "authorizer" {
function_name = "${var.lambda_authorizer_name}"
source_code_hash = "${data.archive_file.lambda_authorizer.output_sha}" # <---
s3_bucket = "${aws_s3_bucket.package.bucket}"
s3_key = "${aws_s3_bucket_object.lambda_authorizer_package.id}" # <---
Или включите управление версиями S3 bucket и измените атрибут s3_object_version функции aws_lambda_function, либо используя version_id из aws_s3_bucket_object, либо после изменения файла в S3 и проверки идентификатора версии.
Один из них вызовет обновление, вызывающее UpdateFunctionCode API как в resource_aws_lambda_function. go.
func needsFunctionCodeUpdate(d resourceDiffer) bool {
return d.HasChange("filename") ||
d.HasChange("source_code_hash") ||
d.HasChange("s3_bucket") ||
d.HasChange("s3_key") ||
d.HasChange("s3_object_version")
}
// UpdateFunctionCode in the API / SDK
func resourceAwsLambdaFunctionUpdate(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).lambdaconn
...
codeUpdate := needsFunctionCodeUpdate(d)
if codeUpdate {
...
log.Printf("[DEBUG] Send Update Lambda Function Code request: %#v", codeReq)
_, err := conn.UpdateFunctionCode(codeReq)
if err != nil {
return fmt.Errorf("Error modifying Lambda Function Code %s: %s", d.Id(), err)
}
...
}
В качестве альтернативы вызвать AWS CLI код функции обновления , который в основном код terraform aws_lambda_function работает.