使用 terraform 将多个 S3 路径添加到胶水爬虫
Adding multiple S3 paths to glue crawler with terraform
我正在使用 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)}"
}
}
这会导致错误:
Error: aws_glue_crawler.datalake_crawler: s3_target.0.path must be a single value, not a list
我尝试在 s3_target
中添加 count
语句,但失败了。我也试过添加
"${formatlist("%s", var.data_source_path)}"
在 path
参数中,但这也失败了。
我可以使用 Terraform 向 Glue Crawler 添加多个 s3
路径吗?我可以通过 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}"
}
}
这在 aws_glue_crawler
resource docs where it says:
中有简要提及
s3_target (Optional) List nested Amazon S3 target arguments. See below.
您也可以在 source code for the resource's schema 中看到这个:
"s3_target": {
Type: schema.TypeList,
Optional: true,
MinItems: 1,
不幸的是,在 0.12 之前,您无法直接在 Terraform 中以编程方式构建它来循环动态路径列表并需要静态指定它们。
Terraform 0.12 将引入 HCL2,它对循环有更好的支持(除了使用 count
),包括 dynamic blocks,它允许你做这样的事情:
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
}
}
}
我正在使用 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)}"
}
}
这会导致错误:
Error: aws_glue_crawler.datalake_crawler: s3_target.0.path must be a single value, not a list
我尝试在 s3_target
中添加 count
语句,但失败了。我也试过添加
"${formatlist("%s", var.data_source_path)}"
在 path
参数中,但这也失败了。
我可以使用 Terraform 向 Glue Crawler 添加多个 s3
路径吗?我可以通过 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}"
}
}
这在 aws_glue_crawler
resource docs where it says:
s3_target (Optional) List nested Amazon S3 target arguments. See below.
您也可以在 source code for the resource's schema 中看到这个:
"s3_target": {
Type: schema.TypeList,
Optional: true,
MinItems: 1,
不幸的是,在 0.12 之前,您无法直接在 Terraform 中以编程方式构建它来循环动态路径列表并需要静态指定它们。
Terraform 0.12 将引入 HCL2,它对循环有更好的支持(除了使用 count
),包括 dynamic blocks,它允许你做这样的事情:
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
}
}
}