地形云:导入现有资源

时间:2020-05-12 05:10:37

标签: 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 = "foo"

    workspaces {
      name = "bar"
    }
  }
}

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

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

Error: No valid credential sources found for AWS Provider.

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

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

2 个答案:

答案 0 :(得分:0)

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

00101010 = 42 (32 + 8 + 2)
00101001 = 41 (32 + 8 + 1)
--------  AND
00101000 = 40 (32 + 8)

现在您可以调用已调配的资源 示例:-

要获取VPC ID:-

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

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

答案 1 :(得分:0)

根据 import docs 的后端部分,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 中配置的权限相同的权限。

AWS SSO 用户注意事项

如果您使用的是 AWS SSO 和 CLI v2,则根据 this AWS provider issue 添加了 terraform 能够将凭证缓存用于 sso 的功能。使用 SSO 配置文件导入的步骤是:

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