You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将手动创建的AWS Glue Crawler导入Terraform状态?

AWS Glue Crawler Terraform导入失败:Cannot import non-existent remote object

问题场景

已通过Terraform模块成功部署AWS Glue Crawler,现在尝试将手动创建的、与tfvars配置完全一致的dynamodb-vw-dashboard-home Crawler导入Terraform状态,执行导入命令后收到错误提示目标对象不存在。

执行的导入命令:

terraform import -var-file=sanbox.tfvars 'module.crawlers.aws_glue_crawler.crawler["dynamodb-vw-dashboard-home"]' arn:aws:glue:us-east-1:xxxxxxxx:crawler/dynamodb-vw-dashboard-home

错误输出:

╷
│ Error: Cannot import non-existent remote object
│
│ While attempting to import an existing object to
│ "module.crawlers.aws_glue_crawler.crawler[\"dynamodb-vw-dashboard-home\"]", the provider detected that no object       
│ exists with the given id. Only pre-existing objects can be imported; check that the id is correct and that it is       
│ associated with the provider's configured region or endpoint, or use "terraform apply" to create a new remote object   
│ for this resource.
╵

相关配置代码

模块main.tf

resource "aws_glue_crawler" "crawler" {
  for_each = var.crawler_list
  database_name = each.value.database_name
  name          = "${each.value.crawler_name}"
  role          = var.crawler_role_arn
  table_prefix  = each.value.table_prefix

# 其他配置项(模块已能正常创建Crawler)
}

variables.tf

variable "crawler_list" {
  description = "crawler list"
  type = map(object({
    database_name = string
    crawler_name  = string
    table_prefix  = optional(string, "")
    s3_target = optional(object({
      s3_create_target = optional(bool,false)
      s3_target_path = optional(string, "")
      s3_exclusions  = optional(list(string),[])
    }),{})
    dynamodb_target = optional(object({
      dynamodb_create_target = optional(bool,false)
      dynamodb_target_path = optional(string, "")
    }),{})
    jdbc_target = optional(object({
      jdbc_create_target = optional(bool,false)
      jdbc_connection_name = optional(string, "")
      jdbc_target_path     = optional(string, "")
      jdbc_exclusions      = optional(list(string),[])
    }),{})
  }))
  default = {}
}

根目录main.tf

module "crawlers" {
  source = "./modules/crawlers"

  service          = var.service
  crawler_list     = var.crawler_list
  crawler_role_arn = "arn:aws:iam::xxxxxxxxxx:role/role-glue"

}

tfvars配置

crawler_list = {
  dynamodb-aud-load-audit = {
    database_name = "dm_web"
    crawler_name  = "dynamodb-aud-load-audit"
    table_prefix  = "vw_"
    dynamodb_target = {
      dynamodb_create_target = true
      dynamodb_target_path   = "vw_dim_geographies"
    }
  }
  dynamodb-vw-dashboard-home = {
    database_name = "dm_web"
    crawler_name  = "dynamodb-vw-dashboard-home"
    dynamodb_target = {
      dynamodb_create_target = true
      dynamodb_target_path   = "vw_dim_geographies"
    }
  }
}

排查与解决步骤

1. 验证Crawler的存在性与区域匹配

用AWS CLI直接确认目标Crawler是否存在于指定区域:

aws glue get-crawler --name dynamodb-vw-dashboard-home --region us-east-1

如果返回Crawler的详细信息,说明资源存在;如果报错,检查名称拼写、区域是否与Terraform配置的AWS区域一致。

2. 改用Crawler名称作为导入ID

Terraform的aws_glue_crawler资源支持直接使用Crawler名称而非ARN作为导入ID,修改导入命令:

terraform import -var-file=sanbox.tfvars 'module.crawlers.aws_glue_crawler.crawler["dynamodb-vw-dashboard-home"]' dynamodb-vw-dashboard-home

3. 确认资源映射键的一致性

检查tfvars中crawler_list的键名dynamodb-vw-dashboard-home与导入命令中的索引完全一致,无大小写或拼写错误。

4. 验证AWS凭证权限

确保Terraform使用的AWS凭证拥有glue:GetCrawler权限,避免因权限不足导致无法识别远程资源。

5. 对比手动创建与Terraform配置的细节

逐一核对手动创建的Crawler与Terraform配置的所有属性:

  • 角色ARN是否完全匹配
  • 数据库名称、表前缀、目标配置是否一致
  • 调度规则、额外配置项等是否与模块定义对齐

内容的提问来源于stack exchange,提问作者Leonardo Arango

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:35:00