带有选定文件和目录的地形数据存档文件源目录
terraform data archive file source directory with selected files and directories
我想创建一个数据 archive_file,其中包含选定的文件和文件夹 source_dir。
我的文件夹结构如下。在 src 目录中,我有 lambdas 目录,其中有几个文件夹
和一组文件如下。
src
|-lambdasfolder
|-__init__.py
|-commonfolder (config.py, __init__.py)
|-lambda1folder (requesthandler.py, __init__.py)
|-lambda2folder (requesthandler.py, __init__.py)
|testsfolder
|otherfolder
...
我想为包含选定文件夹和文件的数据存档文件创建一个源目录。我想创建一个 src 目录,其中只有一个文件和几个匹配的目录
结构如下。
src
|-lambdasfolder
|-__init__.py
|-commonfolder (config.py, __init__.py)
|-lambda1folder (requesthandler.py, __init__.py)
我找到了下面的示例,它压缩了整个目录,但我怎样才能只压缩所需的目录
data "archive_file" "lambda_source"{
type = "zip"
source_dir = "${path.module}/../src"
output_path = "${path.module}/temp/src.zip"
}
我已经设法通过创建空引用和依赖于它的存档文件在某种程度上开始工作。
resource "null_resource" "lambda-repo" {
triggers = {
#not sure on this
}
provisioner "local-exec" {
command = "bash lambda-repo.sh"
working_dir = "${path.module}"
}
}
data "archive_file" "lambda-repo-file" {
depends_on = [null_resource.lambda-repo]
type = "zip"
source_dir = "${path.module}/lambda_archive/lambda-repo"
output_path = "${path.module}/lambda_archive/lambda-repo.zip"
}
和shell脚本如下
#!/bin/sh
mkdir -p lambda_archive/lambda-repo/lambdasfolder/common
mkdir -p lambda_archive/lambda-repo/lambdasfolder/lambda1folder
touch lambda_archive/lambda-repo/lambdasfolder/__init__.py
cp -r ../src/lambdasfolder/common/. lambda_archive/lambda-repo/lambdasfolder/common
cp -r ../src/lambdasfolder/lambda1folder/. lambda_archive/lambda-repo/lambdasfolder/lambda1folder
而且在 s3 对象上,我需要注释初始 terraform 应用的 etag
resource "aws_s3_object" "lambda-repo" {
bucket = aws_s3_bucket.lambda-repo.id
key = "lambda-repo.zip"
source = data.archive_file.lambda-repo-file.output_path
#had to comment etag
#etag = filemd5(data.archive_file.lambda-repo-file.output_path)
}
现在我还有两个问题。
- 在第一个 运行
之后执行 terraform apply 时,它没有检测到 lambda 函数的任何变化
- 如何删除通过空资源创建的文件夹和 zip 文件夹?
很遗憾,您不能这样做,除非您想使用 local-exec 以完全自定义的方式创建 zips。否则,您必须 re-organize 您的文件夹结构才能使 archive_file
.
的文件夹完全独立
我想创建一个数据 archive_file,其中包含选定的文件和文件夹 source_dir。 我的文件夹结构如下。在 src 目录中,我有 lambdas 目录,其中有几个文件夹 和一组文件如下。
src
|-lambdasfolder
|-__init__.py
|-commonfolder (config.py, __init__.py)
|-lambda1folder (requesthandler.py, __init__.py)
|-lambda2folder (requesthandler.py, __init__.py)
|testsfolder
|otherfolder
...
我想为包含选定文件夹和文件的数据存档文件创建一个源目录。我想创建一个 src 目录,其中只有一个文件和几个匹配的目录 结构如下。
src
|-lambdasfolder
|-__init__.py
|-commonfolder (config.py, __init__.py)
|-lambda1folder (requesthandler.py, __init__.py)
我找到了下面的示例,它压缩了整个目录,但我怎样才能只压缩所需的目录
data "archive_file" "lambda_source"{
type = "zip"
source_dir = "${path.module}/../src"
output_path = "${path.module}/temp/src.zip"
}
我已经设法通过创建空引用和依赖于它的存档文件在某种程度上开始工作。
resource "null_resource" "lambda-repo" {
triggers = {
#not sure on this
}
provisioner "local-exec" {
command = "bash lambda-repo.sh"
working_dir = "${path.module}"
}
}
data "archive_file" "lambda-repo-file" {
depends_on = [null_resource.lambda-repo]
type = "zip"
source_dir = "${path.module}/lambda_archive/lambda-repo"
output_path = "${path.module}/lambda_archive/lambda-repo.zip"
}
和shell脚本如下
#!/bin/sh
mkdir -p lambda_archive/lambda-repo/lambdasfolder/common
mkdir -p lambda_archive/lambda-repo/lambdasfolder/lambda1folder
touch lambda_archive/lambda-repo/lambdasfolder/__init__.py
cp -r ../src/lambdasfolder/common/. lambda_archive/lambda-repo/lambdasfolder/common
cp -r ../src/lambdasfolder/lambda1folder/. lambda_archive/lambda-repo/lambdasfolder/lambda1folder
而且在 s3 对象上,我需要注释初始 terraform 应用的 etag
resource "aws_s3_object" "lambda-repo" {
bucket = aws_s3_bucket.lambda-repo.id
key = "lambda-repo.zip"
source = data.archive_file.lambda-repo-file.output_path
#had to comment etag
#etag = filemd5(data.archive_file.lambda-repo-file.output_path)
}
现在我还有两个问题。
- 在第一个 运行 之后执行 terraform apply 时,它没有检测到 lambda 函数的任何变化
- 如何删除通过空资源创建的文件夹和 zip 文件夹?
很遗憾,您不能这样做,除非您想使用 local-exec 以完全自定义的方式创建 zips。否则,您必须 re-organize 您的文件夹结构才能使 archive_file
.