簡體   English   中英

Terraform:是否可以根據 lambda 定義一個空圖像?

[英]Terraform: Is it possible to define an empty image based lambda?

當定義package_type = Zip的 lambda 時,可以創建一個虛擬的temp.zip文件並將其設置為 lambda 的文件名。

創建時,lambda 基本上將有一個空的 zip,稍后可以將其替換為向其推送工件的持續交付管道之類的東西。

我注意到在工作中使用了這種模式。

但是,我正在使用 lambda 容器圖像來處理一些個人問題。

我將其設置為package_type = Image ,並設置其他required的 arguments(根據 Terraform 文檔)。 但是當我運行terraform apply時,我收到一條錯誤消息,指出必須設置 lambda 的image_uri參數。

如果我還沒有構建圖像怎么辦? 是否有一些等效的技術來滿足image_uri要求,基本上創建一個“空”lambda,我稍后計划通過 CD 管道更新它?

一直在四處尋找,但尚未找到解決方案。

如果我還沒有構建圖像怎么辦?

然后你不能創建容器 lambda。 您必須提供一些圖像 url。 它可以是什么都不做的虛擬圖像,但它必須先存在才能創建這樣的 lambda function。

然后稍后您可以使用其他內容更新虛擬圖像。

是的你可以! 這個問題已經在這里回答了,我已經在下面復制了

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
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM