#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 отдельно, затем загрузить изображение, а затем создать лямбду…