0

因此,我创建了 rds 实例,并尝试将其导入 terraform。但是我在我的代码中使用模块,所以在运行 terraform 时出现错误:

起初它说:

module.rds_dr.aws_db_instance.db_instance: Import prepared!
  Prepared aws_db_instance for import

然后它给出错误:

Error: Cannot import non-existent remote object

While attempting to import an existing object to aws_db_instance.db_instance,
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.

我运行的命令是:

terraform import module.rds_dr.aws_db_instance.db_instance db-ID

我使用 github 中的模块源创建了实例。rds 实例的代码如下:

# PostgreSQL RDS DR Instance
module "rds_dr" {
  source = "git@github.com:****"

  name           = var.rds_name_dr
  engine         = var.rds_engine_dr
  engine_version = var.rds_engine_version_dr
  family         = var.rds_family_dr
  instance_class = var.rds_instance_class_dr

  # WARNING: 'terraform taint random_string.rds_password' must be run prior to recreating the DB if it is destroyed
  password                   = random_string.rds_password.result
  port                       = var.rds_port_dr
  security_groups            = [aws_security_group.rds_app.id]
  subnets                    = [module.vpc.public_subnets]
  auto_minor_version_upgrade = var.rds_auto_minor_version_upgrade_dr
  backup_retention_period    = var.rds_backup_retention_period_dr
  backup_window              = var.rds_backup_window_dr
  maintenance_window         = var.rds_maintenance_window_dr
  environment                = var.environment
  kms_key_id                 = aws_kms_key.rds.arn
  multi_az                   = var.rds_multi_az_dr
  notification_topic         = var.rds_notification_topic_dr
  publicly_accessible        = var.rds_publicly_accessible_dr
  storage_encrypted          = var.rds_storage_encrypted_dr
  storage_size               = var.rds_storage_size_dr
  storage_type               = var.rds_storage_type_dr
  apply_immediately          = true
}

此外,这是模块代码的一部分:

resource "aws_db_instance" "db_instance" {

  allocated_storage                   = local.storage_size
  allow_major_version_upgrade         = false
  apply_immediately                   = var.apply_immediately
  auto_minor_version_upgrade          = var.auto_minor_version_upgrade
  backup_retention_period             = var.read_replica ? 0 : var.backup_retention_period
  backup_window                       = var.backup_window
  character_set_name                  = local.is_oracle ? var.character_set_name : null
  copy_tags_to_snapshot               = var.copy_tags_to_snapshot
  db_subnet_group_name                = local.same_region_replica ? null : local.subnet_group
  deletion_protection                 = var.enable_deletion_protection
  engine                              = var.engine
  engine_version                      = local.engine_version
  final_snapshot_identifier           = lower("${var.name}-final-snapshot${var.final_snapshot_suffix == "" ? "" : "-"}${var.final_snapshot_suffix}")
  iam_database_authentication_enabled = var.iam_authentication_enabled
  identifier_prefix                   = "${lower(var.name)}-"
  instance_class                      = var.instance_class
  iops                                = var.storage_iops
  kms_key_id                          = var.kms_key_id
  license_model                       = var.license_model == "" ? local.license_model : var.license_model
  maintenance_window                  = var.maintenance_window
  max_allocated_storage               = var.max_storage_size
  monitoring_interval                 = var.monitoring_interval
  monitoring_role_arn                 = var.monitoring_interval > 0 ? local.monitoring_role_arn : null
  multi_az                            = var.read_replica ? false : var.multi_az
  name                                = var.dbname
  option_group_name                   = local.same_region_replica ? null : local.option_group
  parameter_group_name                = local.same_region_replica ? null : local.parameter_group
  password                            = var.password
  port                                = local.port
  publicly_accessible                 = var.publicly_accessible
  replicate_source_db                 = var.source_db
  skip_final_snapshot                 = var.read_replica || var.skip_final_snapshot
  snapshot_identifier                 = var.db_snapshot_id
  storage_encrypted                   = var.storage_encrypted
  storage_type                        = var.storage_type
  tags                                = merge(var.tags, local.tags)
  timezone                            = local.is_mssql ? var.timezone : null
  username                            = var.username
  vpc_security_group_ids              = var.security_groups
  }

这是我的供应商代码:

# pinned provider versions

provider "random" {
  version = "~> 2.3.0"
}

provider "template" {
  version = "~> 2.1.2"
}

provider "archive" {
  version = "~> 1.1"
}

# default provider
provider "aws" {
  version             = "~> 2.44"
  allowed_account_ids = [var.aws_account_id]
  region              = "us-east-1"
}

# remote state
terraform {
  required_version = "0.12.24"

  backend "s3" {
    key     = "terraform.dev.tfstate"
    encrypt = "true"
    bucket  = "dev-tfstate"
    region  = "us-east-1"
  }
}

我已经插入了正确的数据库 ID,但我仍然不知道为什么 terraform 说“导入不存在的远程对象”?我该如何解决?

4

0 回答 0