Ste*_*ven 2 amazon-s3 amazon-web-services terraform aws-glue terraform-provider-aws
我正在使用Terraform在AWS中构建一些基础架构。我创建了几个S3存储桶,并希望Glue搜寻器每小时对这些存储桶进行一次爬网。我的Terraform Glue目录数据库,角色和策略都构建良好,但是当我尝试通过向爬网程序的s3_target{}
一部分添加四个S3路径来创建爬网程序资源时,出现了故障:
resource "aws_glue_crawler" "datalake_crawler" {
database_name = "${var.glue_db_name}"
name = "${var.crawler_name}"
role = "${aws_iam_role.glue.id}"
s3_target {
# count = "${length(var.data_source_path)}"
path = "${var.data_source_path}"#"${formatlist("%s", var.data_source_path)}"
}
}
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
Error: aws_glue_crawler.datalake_crawler: s3_target.0.path must be a single value, not a list
Run Code Online (Sandbox Code Playgroud)
我尝试在中添加一条count
语句,s3_target
但这失败。我也尝试添加
"${formatlist("%s", var.data_source_path)}"
Run Code Online (Sandbox Code Playgroud)
在path
争论中,但这也失败了。
我可以s3
使用Terraform向Glue履带添加多个路径吗?我可以通过AWS控制台实现这一点,但这需要使用基础架构作为代码来完成。
要定位其他S3路径,您可以s3_target
像这样多次重复执行代码块:
resource "aws_glue_crawler" "datalake_crawler" {
database_name = "${var.glue_db_name}"
name = "${var.crawler_name}"
role = "${aws_iam_role.glue.id}"
s3_target {
path = "${var.data_source_path_1}"
}
s3_target {
path = "${var.data_source_path_2}"
}
}
Run Code Online (Sandbox Code Playgroud)
这是简要提到的aws_glue_crawler
资源文件在那里说:
s3_target(可选)列出嵌套的Amazon S3目标参数。见下文。
resource "aws_glue_crawler" "datalake_crawler" {
database_name = "${var.glue_db_name}"
name = "${var.crawler_name}"
role = "${aws_iam_role.glue.id}"
s3_target {
path = "${var.data_source_path_1}"
}
s3_target {
path = "${var.data_source_path_2}"
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,在0.12之前的版本中,您无法直接在Terraform中以编程方式构建此程序,以遍历动态路径列表,而需要静态地指定它们。
Terraform 0.12将引入HCL2,它对count
包括动态块在内的循环(使用除外)具有更好的支持,这将使您可以执行以下操作:
resource "aws_glue_crawler" "datalake_crawler" {
database_name = var.glue_db_name
name = var.crawler_name
role = aws_iam_role.glue.id
dynamic "s3_target" {
for_each = var.data_source_paths
content {
path = s3_target
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
627 次 |
最近记录: |