跳至主要内容

命令:import

tofu import 命令将现有资源 导入 到 OpenTofu 中。

用法

用法:tofu import [选项] ADDRESS ID

导入将从 ID 中查找现有资源,并将其导入到给定 ADDRESS 处的 OpenTofu 状态中。

ADDRESS 必须是有效的 资源地址。由于任何资源地址都是有效的,因此导入命令可以将资源导入到模块中,也可以直接导入到状态的根目录中。

ID 取决于要导入的资源类型。例如,对于 AWS EC2 实例,它是实例 ID (i-abcd1234),但对于 AWS Route53 区域,它是区域 ID (Z12ABC4UGMOZ2N)。有关 ID 格式的详细信息,请参阅提供程序文档。如果您不确定,可以随意尝试一个 ID。如果 ID 无效,您只会收到错误消息。

命令行标志都是可选的。以下标志可用

  • -config=path - OpenTofu 配置文件的目录路径,用于配置导入的提供程序。默认为您的工作目录。如果此目录不包含任何 OpenTofu 配置文件,则必须通过手动输入或环境变量来配置提供程序。

  • -input=true - 是否询问提供程序配置的输入。

  • -lock=false - 在操作期间不持有状态锁。如果其他人可能同时对同一工作区运行命令,则此操作很危险。

  • -lock-timeout=0s - 重试状态锁的持续时间。

  • -no-color - 如果指定,输出将不包含任何颜色。

  • -parallelism=n - 限制并发操作的数量,因为 OpenTofu 遍历图。默认为 10。

  • -provider=provider - 已弃用 覆盖导入对象时要使用的提供程序配置。默认情况下,OpenTofu 使用目标资源配置中指定的提供程序,在大多数情况下,这是最佳行为。

  • -var 'foo=bar' - 在 OpenTofu 配置中设置变量。此标志可以设置多次。变量值在 OpenTofu 语言中被解释为 文字表达式,因此列表和映射值可以通过此标志指定。

  • -var-file=foo - 从 变量文件 中设置 OpenTofu 配置中的变量。如果当前目录中存在 terraform.tfvars 或任何 .auto.tfvars 文件,则会自动加载它们。terraform.tfvars 首先加载,然后按字母顺序加载 .auto.tfvars 文件。由 -var-file 指定的任何文件都将覆盖从工作目录中的文件自动设置的任何值。此标志可以多次使用。这仅在使用 -config 标志时才有用。

仅对于使用 cloud 后端remote 后端 的配置,tofu import 还接受选项 -ignore-remote-version

仅对于使用 local 后端 的配置,tofu import 还接受旧版选项 -state-state-out-backup

提供程序配置

OpenTofu 将尝试加载配置用于导入的提供程序的配置文件。如果不存在配置文件或不存在该特定提供程序的配置,OpenTofu 将提示您输入访问凭据。您还可以指定环境变量来配置提供程序。

OpenTofu 在读取配置文件时唯一的限制是导入提供程序配置不能依赖于非变量输入。例如,提供程序配置不能依赖于数据源。

作为一个工作示例,如果您正在导入 AWS 资源,并且您有一个包含以下内容的配置文件,则 OpenTofu 将使用此文件配置 AWS 提供程序。

代码块
variable "access_key" {}
variable "secret_key" {}

provider "aws" {
access_key = "${var.access_key}"
secret_key = "${var.secret_key}"
}

示例:导入到资源

此示例将 AWS 实例导入到名为 fooaws_instance 资源中。

代码块
$ tofu import aws_instance.foo i-abcd1234

示例:导入到模块

以下示例将 AWS 实例导入到名为 foo 的模块中名为 baraws_instance 资源中。

代码块
$ tofu import module.foo.aws_instance.bar i-abcd1234

示例:导入到使用 count 配置的资源

以下示例将 AWS 实例导入到使用 count 配置的名为 bazaws_instance 资源的第一个实例中。

代码块
$ tofu import 'aws_instance.baz[0]' i-abcd1234

示例:导入到使用 for_each 配置的资源

以下示例将 AWS 实例导入到使用 for_each 配置的名为 bazaws_instance 资源的 "example" 实例中。

Linux、Mac OS 和 UNIX

代码块
$ tofu import 'aws_instance.baz["example"]' i-abcd1234

PowerShell

代码块
$ tofu import 'aws_instance.baz[\"example\"]' i-abcd1234

Windows cmd.exe

代码块
$ tofu import aws_instance.baz[\"example\"] i-abcd1234