Terraform 地形云:导入现有资源

Terraform 地形云:导入现有资源,terraform,terraform-provider-aws,terraform-cloud,Terraform,Terraform Provider Aws,Terraform Cloud,我正在使用terraform cloud来管理AWS中配置的基础设施的状态 我正在尝试使用terraform import导入当前未由terraform管理的现有资源 我知道terraform import是一个仅限本地的命令。我已设置工作区参考,如下所示: terraform { required_version = "~> 0.12.0" backend "remote" { hostname = "app.terraform.io" organization

我正在使用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使用工作区中配置的凭据


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

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

data "terraform_remote_state" "test" {
  backend = "s3"
  config = {
    bucket = "BUCKET_NAME"
    key    = "BUCKET_KEY WHERE YOUR TERRAFORM.TFSTATE FILE IS PRESENT"
    region = "CLOUD REGION"
  }
}
现在,您可以调用已配置的资源 例如:-

要获取VPC ID,请执行以下操作:-

data.terraform_remote_state.test.*.outputs.vpc_id

只需将要引用的云资源属性导出为输出,并存储在terraform.tfstate文件中,
计划
应用
在terraform云中运行,而
导入
在本地运行。因此,import命令将无法访问Terraform Cloud中设置的工作区凭据。从文档中:

为了将Terraform导入与远程状态后端一起使用,您可能需要设置与远程工作区变量等效的本地变量

因此,不要在本地运行以下操作(假设您提供了Terraform Cloud的访问密钥):

terraform导入aws_instance.myserver i-12345
例如,我们应该运行:

export AWS\u ACCESS\u KEY\u ID=abc
导出AWS\u密码\u访问\u密钥=1234
terraform导入aws_instance.myserver i-12345
其中,
AWS\u ACCESS\u KEY\u ID
AWS\u SECRET\u ACCESS\u KEY
与Terraform Cloud中配置的权限相同

AWS SSO用户注意事项 如果您使用的是AWS SSO和CLI v2,则根据添加了terraform能够使用SSO凭据缓存的功能。使用SSO配置文件导入的步骤包括:

  • 确保您已执行了登录,并与aws sso登录等进行了活动会话--配置我的配置文件
  • 将配置文件名称作为环境变量提供给terraform,例如,
    AWS\u profile=my profile terraform import AWS\u instance.myserver i-12345

我正在尝试导入一个不由terraform管理的现有资源。terraform_remote_状态在这种情况下没有帮助。请尝试-从现有基础结构生成terraform文件不是问题所在。我已经确定了资源。我的主要挑战是,
terraform import
似乎没有引用云工作区变量,而是使用本地变量作为凭据。