我在terraform中有这个代码:
data "archive_file" "lambdazip" {
type = "zip"
output_path = "lambda_launcher.zip"
source_dir = "lambda/etc"
source_dir = "lambda/node_modules"
source {
content = "${data.template_file.config_json.rendered}"
filename = "config.json"
}
}
我terraform plan
时出现以下错误:
* data.archive_file.lambdazip: "source": conflicts with source_dir
("lambda/node_modules")
* data.archive_file.lambdazip: "source_content_filename": conflicts
with source_dir ("lambda/node_modules")
* data.archive_file.lambdazip: "source_dir": conflicts with
source_content_filename ("/home/user1/experiments/grascenote-
poc/init.tpl")
我正在使用terraform版本v0.9.11
答案 0 :(得分:0)
@Ram是正确的。您不能在同一window.history.ignoreUrlVariables()
块中使用source_dir
和source
。
archive_file
Terraform运行
data "template_file" "config_json" {
template = "${file("${path.module}/config_json.tpl")}"
vars = {
override = "my value"
}
}
# create the template file config_json separately from the archive_file block
resource "local_file" "config" {
content = "${data.template_file.config_json.rendered}"
filename = "${path.module}/lambda/etc/config.json"
}
# now you can grab the entire lambda source directory or specific subdirectories
data "archive_file" "lambdazip" {
type = "zip"
output_path = "lambda_launcher.zip"
source_dir = "lambda/"
#source_dir = "lambda/etc"
#source_dir = "lambda/node_modules"
}
压缩文件内容
$ terraform init
$ terraform apply
data.template_file.config_json: Refreshing state...
data.archive_file.lambdazip: Refreshing state...
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
+ local_file.config
id: <computed>
content: "{\"test\": \"my value\"}\n"
filename: "/Users/user/lambda/config.json"
Plan: 1 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
local_file.config: Creating...
content: "" => "{\"test\": \"my value\"}\n"
filename: "" => "/Users/user/lambda/config.json"
local_file.config: Creation complete after 0s (ID: 05894e86414856969d915db57e21008563dfcc38)
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
答案 1 :(得分:0)
对于node.js lambda函数,
您需要将“ resource.local_file”与“ depends_on”一起使用。 并将“渲染文件”与“目录”分开。
首先,将静态目录(等,node_modules)放入“ lambda”文件夹中而不渲染文件。
第二,将渲染文件放入其他任何路径。
data "template_file" "config_json" {
template = "${file("${path.module}/config_json.tpl")}"
vars = {
foo = "bar"
}
}
resource "local_file" "config_json" {
content = "${data.template_file.config_json.rendered}"
filename = "${path.module}/lambda/config.json"
}
data "archive_file" "lambda_zip" {
type = "zip"
output_path = "${path.module}/lambda_function.zip"
source_dir = "${path.module}/lambda"
# It is important to this process.
depends_on = [
"local_file.config_json"
]
}
resource "aws_lambda_function" "lambda" {
filename = "${path.module}/lambda_function.zip"
function_name = "lambda_function"
role = "${aws_iam_role.lambda.arn}"
handler = "index.handler"
runtime = "nodejs10.x"
}
resource "aws_iam_role" "lambda" {
...