如何在 Terraform 中使用 git 存储库作为 AWS Lambda 源?

pat*_*pat 5 git aws-lambda terraform

我正在Terraform中配置 AWS Lambda - 最初,我在 Terraform 目录中有一个 JS 文件,它是整个 lambda 函数:

data "archive_file" "auth_requests" {
  type        = "zip"
  source_file = "${path.module}/auth_requests/index.js"
  output_path = "${path.module}/auth_requests.zip"
}

resource "aws_lambda_function" "auth_requests" {
  function_name    = "auth_requests"
  filename         = "${data.archive_file.auth_requests.output_path}"
  role             = "${aws_iam_role.auth_requests.arn}"
  handler          = "index.handler"
  source_code_hash = "${data.archive_file.auth_requests.output_base64sha256}"
  runtime          = "nodejs8.10"
}
Run Code Online (Sandbox Code Playgroud)

但是,很明显,Lambda 函数应该获得自己的 git 存储库,而不是存在于我们更广泛的 Terraform 存储库中。有没有办法使用 Terraform 从 git repo 获取源文件(然后带入生成的存档)?

我可以将 lambda 的 GitHub 存储库定义为资源,但是接下来克隆/更新它以便archive_file可以引用它的步骤是什么?或者可以将 Terraform 模块重新用于此类用途?

moe*_*ius 1

假设您使用 Github 存储库来存储 JS 函数,您可以使用Github Content API下载存储库的 zip curl

curl -L -o <output zip filename> https://<github repo url>/zipball/master
Run Code Online (Sandbox Code Playgroud)

您可以在 Terraform 中使用External提供程序而不是Archive提供程序来实现此目的:

data "external" "download_function" {
  program = ["curl", "-L", "-o", 
"${path.module}/auth_requests.zip", "${var.github_repo_url}"]
}
Run Code Online (Sandbox Code Playgroud)

缺点是您现在有一个外部依赖项(curl)。