【问题标题】:Using Github Relase .zip file for Lambda Function将 Github Relase .zip 文件用于 Lambda 函数
【发布时间】:2021-09-28 06:27:49
【问题描述】:

我正在尝试使用 Terraform 来启动一个 lambda 函数,该函数使用 github 发布包中的源代码。包的位置是:

https://github.com/DataDog/datadog-serverless-functions/releases

这将允许我手动创建 AWS DataDog 转发器,而无需使用其 Cloudformation 模板(我们希望尽可能多地控制该过程)。

我不完全确定如何下载该 zip 文件以供 lambda 函数使用

resource "aws_lambda_function" "test_lambda" {
  filename      = "lambda_function_payload.zip"
  function_name = "datadog-forwarder"
  role          = aws_iam_role.datadog_forwarder_role.arn

  source_code_hash = filebase64sha256("lambda_function_payload.zip")

  runtime = "python3.7"

  environment {
    variables = {
      DD_API_KEY_SECRET_ARN = aws_secretsmanager_secret_version.dd_api_key.arn
      #This stops the Forwarder from generating enhanced metrics itself, but it will still forward custom metrics from other lambdas.
      DD_ENHANCED_METRICS = false
      DD_S3_BUCKET_NAME = aws_s3_bucket.datadog_forwarder.name
    }
  }
}

我知道source_code_hash 文件名会改变,lambda 函数的文件名也会改变。任何帮助将不胜感激。

【问题讨论】:

  • 我可以在 terraform 上使用 local_exec 并使用 wget 下载 zip 文件

标签: amazon-web-services github aws-lambda terraform terraform-provider-aws


【解决方案1】:

在 terraform 中没有从互联网下载文件的内置功能。但是您可以使用external data source 相对轻松地做到这一点。为此,您将创建一个 bash 脚本,该脚本可以使用 curl 来下载您的 zip、打开它、检查或执行您需要的任何处理。源还会返回可用于创建函数的数据。

替代方法是将null_resourcelocal-exec 一起使用到curl 您的zip 文件。但是local-exec 的通用性不如external data source

【讨论】:

    【解决方案2】:

    有一种方法可以为 AWS Lambda 指定 zip 文件。查看https://github.com/hashicorp/terraform-provider-aws/blob/main/examples/lambda 中的示例配置。

    它使用archive_file类型的数据源

    data "archive_file" "zip" {
       type        = "zip"
       source_file = "hello_lambda.py"
       output_path = "hello_lambda.zip"
     }
    

    aws_lambda_function 资源设置文件名和source_code_hash:

     resource "aws_lambda_function" "lambda" {
       function_name = "hello_lambda"
    
       filename         = data.archive_file.zip.output_path
       source_code_hash = data.archive_file.zip.output_base64sha256
       .....
     }
    

    查看示例文件了解完整详情。

    Terraform AWS 提供商正在调用 CreateFunction API (https://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html),它允许您指定一个 zip 文件。

    【讨论】:

      猜你喜欢
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多