Функция Terraform aws_lambda_функция Требует Изображения Докера В ECR

#terraform #amazon-ecr

Вопрос:

У меня есть модуль, который создает всю инфраструктуру, необходимую для лямбды, включая ECR, в котором хранится изображение:

 resource "aws_ecr_repository" "image_storage" {
  name                 = "${var.project}/${var.environment}/lambda"
  image_tag_mutability = "MUTABLE"

  image_scanning_configuration {
    scan_on_push = true
  }
}

resource "aws_lambda_function" "executable" {
  function_name = var.function_name
  image_uri     = "${aws_ecr_repository.image_storage.repository_url}:latest"
  package_type  = "Image"
  role          = aws_iam_role.lambda.arn
}
 

Проблема с этим, конечно, в том, что это не удается, потому что при запуске функции aws_lambda_function репозиторий есть, но изображения нет: изображение загружается с помощью моего CI/CD.

Так что это проблема с куриным яйцом. Предполагается, что Terraform используется только для инфраструктуры, поэтому я не могу/не должен использовать его для загрузки изображения (даже фиктивного), но я не могу создать экземпляр инфраструктуры, если изображение не загружено между этапами создания репозитория и лямбды.

Единственное решение, которое я могу придумать, — это создать ECR отдельно от лямбды, а затем каким-то образом связать его как существующий ресурс aws в моей лямбде, но это кажется довольно неуклюжим.

Есть какие-нибудь предложения?

Комментарии:

1. Да, отдельное создание-это то, что обычно делается в таком случае.

2. Кстати, вы предоставляете URL-адрес репозитория для image_uri, а не URL-адрес изображения docker, так что это все равно не сработает. Репозиторий может содержать несколько образов docker. Это должно выглядеть более или менее так ${aws_ecr_repository.image_storage.repository_url}/imageName:latest . Поэтому вам нужно сначала создать ECR отдельно, затем загрузить изображение, а затем создать лямбду…