【问题标题】:terraform import rds issueterraform 导入 rds 问题
【发布时间】:2018-03-25 03:46:20
【问题描述】:

我是 terraform 新手。我在 AWS 中手动创建了 RDS。

现在我尝试使用https://www.terraform.io/docs/providers/aws/r/db_instance.html 将 RDS 导入 terraform,以便我可以使用 terraform 更新 RDS。数据库名称是 mydb。我已经运行了terraform init,但出现了这个错误,仍然不知道如何解决它。请指教。谢谢

terraform import aws_db_instance mydb
Error: invalid resource address "aws_db_instance"

For information on valid syntax, see:
https://www.terraform.io/docs/internals/resource-addressing.html

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:
    resource "aws_db_instance" "xyz"{
    
         #... db configuration...
    }
    

    运行terraform import aws_db_instance.xyz aws_db_identifier

    【讨论】:

    • 对我有用的命令是terraform import aws_db_instance.xyz <DB instance id >
    【解决方案2】:

    我知道这个问题很老,但其他人可能对解决方案感兴趣。在此示例中,我有一个名为“db1”的 RDS PostGreSQL 数据库,我想将其导入 terraform。

    您需要将数据库描述为 terraform,如下例所示:

    resource "aws_db_instance" "db1" {
         allocated_storage    = 20
         engine               = "postgres"
         engine_version       = "11.5"
         instance_class       = "db.t2.micro"
         name                 = "db1"
         username             = "postgres"
         password             = "secret"
         parameter_group_name = "default.postgres11"
    }
    

    调用 terraform 为:

    terraform import aws_db_instance.db1 db1  
    

    希望你会看到

    aws_db_instance.db1: Importing from ID "db1"...
    aws_db_instance.db1: Import prepared! 
      Prepared aws_db_instance for import
    aws_db_instance.db1: Refreshing state... [id=db1]
    
    Import successful!
    

    【讨论】:

      【解决方案3】:

      Terraform 导入仅基于现有配置 (resource.tf/main.tf) 创建状态文件 .tfstate 文件。

      到目前为止,terraform 不会为您提供配置文件。每当您使用 import 命令时,它都会根据您现有的 AWS 资源创建一个 tfstate 文件,并将其与您创建的资源配置进行映射。

      然后你可以运行 terraform plan 命令,看看你的资源和 tfstate 文件有什么区别,从而调整你的资源参数。

      你得到的错误清楚地提到你没有任何本地资源配置可用于映射 tfstate 状态。

      第一步:创建本地资源文件

      resource "aws_db_instance" "db1" {
           allocated_storage    = 20
           engine               = "postgres"
           engine_version       = "11.5"
      .
      .
      .
      .
      other config etc...
      }
      

      第 2 步:使用 terraform import 导入现有资源并将其映射到“aws_db_instance”。

      第 3 步:运行terraform plan 以查看本地资源和导入资源之间的配置差异并修复它。

      一旦 terraform 提出在我们导入现有资源时自动创建新配置,我们根本不需要担心这个。

      【讨论】:

        【解决方案4】:

        您需要提及resource_name - 资源的用户定义名称。

        terraform import aws_db_instance.<resource_name> <DataBaseIndentifier>
        

        【讨论】:

        • Error: resource address "aws_db_instance.mydb" does not exist in the configuration. Before importing this resource, please create its configuration in the root module. For example: resource "aws_db_instance" "mydb" { # (resource arguments) } 这是我在 AWS 管理控制台中创建的现有数据库和资源。不知道为什么找不到。
        • 好的。文件terraform.tfstate 已创建。但这不是我可以修改的配置吗?
        【解决方案5】:

        您需要先在 terraform 项目中创建资源块,然后才能导入现有资源。

        【讨论】:

          【解决方案6】:

          目前,在将现有资源导入 Terraform 之前,您需要在 .tf 文件中设置一个空资源块。

          示例

          rds.tf:

          resource "aws_rds_cluster" "default" {
             
          } 
          

          然后运行:

          terraform import aws_rds_cluster.default <identifier>
          

          从这里,运行terraform show 并找到您刚刚导入的资源并将内容复制回您的rds.tf 文件中(排除任何提到的导出属性,直到您得到一个干净的terraform plan

          注意:要导入特定资源,您可以在资源的 Terraform 文档页面的最底部找到更多信息,例如https://www.terraform.io/docs/providers/aws/r/rds_cluster.html

          【讨论】:

            【解决方案7】:

            如果你创建了类似模块的rds资源,需要在资源名前加上module。

            你可以在 terraform plan 命令中看到资源名称。

            terraform import module.rds_sample.aws_rds_cluster_instance.rds_cluster_instances <R-name>
            

            【讨论】:

              猜你喜欢
              • 2019-10-25
              • 2021-10-21
              • 1970-01-01
              • 1970-01-01
              • 2021-06-13
              • 2020-08-27
              • 2021-08-01
              • 1970-01-01
              • 2021-09-28
              相关资源
              最近更新 更多