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

如何在Terraform中将git存储库用作AWS Lambda源?,git,aws-lambda,terraform,Git,Aws Lambda,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_fu

我正在中配置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"
}
然而,很明显,Lambda函数应该有自己的git repo,而不是生活在我们更广泛的Terraform repo中。有没有一种方法可以使用Terraform从git repo中获取文件(然后将其放入生成的归档文件中)


我可以定义lambda的GitHub repo,但是接下来要做什么才能克隆/更新它,以便
archive\u文件可以引用它呢?或者可以将Terraform模块重新用于类似的用途吗?

假设您使用Github存储库来存储JS功能,您可以使用来下载repo的zip文件,使用
curl

curl -L -o <output zip filename> https://<github repo url>/zipball/master

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

您有什么理由不想让Lambda函数的repo处理部署它的问题吗?目前,我们的所有基础设施都在一个repo中—应用程序/项目之间存在一些重叠访问。当然,如果我们更清楚地将其分开,那么按照您的建议执行可能非常有意义。我发现在应用程序的repo中拥有特定于应用程序的基础设施并允许用于repo的CI部署东西是一种有用的模式,但我想并非所有人都对此感到满意。如果您不想这样做,您可以让Lambda repo负责将其推送到S3,然后让基础设施repo负责部署它。program属性描述的外部程序必须实现与Terraform交互的特定协议,如下所示:然后程序必须在stdout上生成一个有效的JSON对象,该对象将用于填充导出到Terraform配置其余部分的结果属性。
data "external" "download_function" {
  program = ["curl", "-L", "-o", 
"${path.module}/auth_requests.zip", "${var.github_repo_url}"]
}