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 模块重新用于此类用途?
假设您使用 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)。