定义package_type = Zip
的lambda时,可以创建一个伪temp.zip
文件并将其设置为lambda的文件名。
创建时,lambda基本上会有一个空的zip,稍后可以用类似于将工件推送给它的连续交付管道的东西来替换
我注意到工作中使用了这种模式。
然而,我使用lambda容器图像是为了一些私人的东西。
我将其设置为package_type = Image
,并设置其他required
参数(根据Terraform文档(。但是当我运行terraform apply
时,我得到一个错误,说必须设置lambda的image_uri
参数。
如果我还没有建立一个图像呢?是否有一些等效的技术来满足image_uri
的要求;"空";lambda,我稍后计划通过CD管道进行更新?
一直在四处寻找,但还没有找到解决方案。
如果我还没有构建映像怎么办?
则无法创建容器lambda。你必须提供一些图片url。它可以是一个什么都不做的伪映像,但在创建这样的lambda函数之前,它必须预先存在。
然后,稍后可以使用其他内容更新伪图像。
是的,你可以!这个问题已经在这里得到了回答,我已经把它复制到下面
data "aws_ecr_authorization_token" "token" {}
resource "aws_ecr_repository" "repository" {
name = "lambda-${local.name}-${local.environment}"
image_tag_mutability = "MUTABLE"
tags = local.common_tags
image_scanning_configuration {
scan_on_push = true
}
lifecycle {
ignore_changes = all
}
provisioner "local-exec" {
# This is a 1-time execution to put a dummy image into the ECR repo, so
# terraform provisioning works on the lambda function. Otherwise there is
# a chicken-egg scenario where the lambda can't be provisioned because no
# image exists in the ECR
command = <<EOF
docker login ${data.aws_ecr_authorization_token.token.proxy_endpoint} -u AWS -p ${data.aws_ecr_authorization_token.token.password}
docker pull alpine
docker tag alpine ${aws_ecr_repository.repository.repository_url}:SOME_TAG
docker push ${aws_ecr_repository.repository.repository_url}:SOME_TAG
EOF
}
}