地形云:导入现有资源



我正在使用terraform cloud来管理 AWS 中预置的基础设施的状态。

我正在尝试使用terraform import导入当前未由terraform管理的现有资源。

我知道terraform import是仅限本地的命令。我设置了一个工作区参考,如下所示:

terraform {
required_version = "~> 0.12.0"
backend "remote" {
hostname = "app.terraform.io"
organization = "foo"
workspaces {
name = "bar"
}
}
}

AWS 凭证是在远程云工作区中配置的,但 terraform 似乎没有引用工作区中的 AWS 凭证,而是回退到尝试使用指向不同 AWS 账户的本地凭证。我希望 Terraform 在运行terraform import时通过引用工作区中的变量来使用凭据。

当我注释掉本地配置的凭据时,出现错误:

Error: No valid credential sources found for AWS Provider.

我本来希望 terraform 使用在工作区中配置的凭据。

请注意,当我直接从云控制台运行计划/应用命令时,terraform 能够正确使用凭据。

根据导入文档的后端部分,planapply在Terraform Cloud中运行,而import在本地运行。 因此,导入命令将无法访问在 Terraform Cloud 中设置的工作区凭据。 从文档中:

为了将 Terraform 导入与远程状态后端配合使用,您可能需要设置与远程工作区变量等效的局部变量。

因此,与其在本地运行以下内容(假设您已经提供了 Terraform Cloud 的访问密钥(:

terraform import aws_instance.myserver i-12345

我们应该运行例如:

export AWS_ACCESS_KEY_ID=abc
export AWS_SECRET_ACCESS_KEY=1234
terraform import aws_instance.myserver i-12345

其中AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY具有与 Terraform Cloud 中配置的权限相同的权限。

Note for AWS SSO users

如果您使用的是 AWS SSO和 CLI v2,则根据此 AWS 提供程序问题添加了 terraform 的功能,以便能够使用 SSO 的凭证缓存。 使用 SSO 配置文件导入的步骤如下:

  • 确保您已执行登录并具有活动会话,例如aws sso login --profile my-profile
  • 使配置文件名称作为环境变量可用于terraform,例如AWS_PROFILE=my-profile terraform import aws_instance.myserver i-12345

如果显示以下错误,请确保您使用的是 cli> 2.1.23 的版本:

Error: SSOProviderInvalidToken: the SSO session has expired or is invalid
│ caused by: expected RFC3339 timestamp: parsing time "2021-07-18T23:10:46UTC" as "2006-01-02T15:04:05Z07:00": cannot parse "UTC" as "Z07:00"

使用数据提供程序,例如:-

data "terraform_remote_state" "test" {
backend = "s3"
config = {
bucket = "BUCKET_NAME"
key    = "BUCKET_KEY WHERE YOUR TERRAFORM.TFSTATE FILE IS PRESENT"
region = "CLOUD REGION"
}
}

现在,您可以调用预配的资源 例:-

要获取专有网络 ID:-

data.terraform_remote_state.test.*.outputs.vpc_id

只需将要引用的云资源属性导出为输出并存储在terraform.tfstate文件中即可

相关内容

  • 没有找到相关文章

最新更新