地形云 : Import existing resource

标签 terraform terraform-provider-aws 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 能够正确使用凭据。

最佳答案

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

In order to use Terraform import with a remote state backend, you may need to set local variables equivalent to the remote workspace variables.


因此,不要在本地运行以下命令(假设您已提供 Terraform Cloud 的访问 key ):
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 配置文件导入的步骤是:
  • 确保您已执行登录并与例如有一个事件 session aws sso login --profile my-profile
  • 使配置文件名称可用于 terraform 作为环境变量,例如AWS_PROFILE=my-profile terraform import aws_instance.myserver i-12345

  • 如果显示以下错误,请确保您是 using a version of the 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"
    

    关于地形云 : Import existing resource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61744247/

    相关文章:

    terraform - Terraform 中使用多个 user_data 文件

    amazon-web-services - 如何使用 Terraform 添加或删除安全组的入口/导出规则?

    azure - Terraform VMSS CustomScriptExtension - 如何指向存储帐户 blob 中的脚本?

    amazon-web-services - 将efs音量添加到ecs fargate

    使用相对本地路径引用模块时 Terraform 云失败

    azure - Terraform Cloud 无法在防火墙后面的存储帐户中创建容器

    database - 在 AWS RDS 集群实例上使用 Terraform 预置多个逻辑数据库

    terraform - 使用 terraform 修改预先存在的 IAM 角色

    terraform - 如何使用带有传入变量的 terraform import ?

    azure - Terraform Cloud 无法在 Azure 中国订阅中部署资源