От новичка до гуру: Курсы программирования на CyberDuff

Terraform: как импортировать ресурс кросс-аккаунта AWS?

Как импортировать существующий ресурс AWS в состояние Terraform, если этот ресурс существует в другой учетной записи?

terraform import module.mymodule.aws_iam_policy.policy arn:aws:iam::123456789012:policy/mypolicy

дает следующую ошибку:

Error: Cannot import non-existent remote object

While attempting to import an existing object to aws_iam_policy.policy, the
provider detected that no object exists with the given id. Only pre-existing
objects can be imported; check that the id is correct and that it is
associated with the provider's configured region or endpoint, or use
"terraform apply" to create a new remote object for this resource.

Ресурс был создан в одной учетной записи с использованием другого провайдера, определенного в модуле mymodule:

module "mymodule" {
    // ... define variables for the module
}

// within the module
provider "aws" {
  alias = "cross-account"
  region = "eu-west-2"
  assume_role {
    role_arn = var.provider_role_arn
  }
}

resource "aws_iam_policy" "policy" {
  provider = "aws.cross-account"
  name        = var.policy-name
  path        = var.policy-path
  description = var.policy-description

  policy = var.policy-document
}

Как импортировать ресурсы для нескольких аккаунтов?

Обновление: используя флаг -provider, я получаю другую ошибку:

Error: Provider configuration not present

To work with module.mymodule.aws_iam_policy.policy (import
id "arn:aws:iam::123456789012:policy/somepolicytoimport") its original provider
configuration at provider.aws.cross-account is required, but it has been
removed. This occurs when a provider configuration is removed while objects
created by that provider still exist in the state. Re-add the provider
configuration to destroy
module.mymodule.aws_iam_policy.policy (import id
"arn:aws:iam::123456789012:policy/somepolicytoimport"), after which you can remove
the provider configuration again.

  • Какую версию Terraform вы используете? 01.11.2019
  • Последняя версия (0.12.12) 01.11.2019
  • Вам не нужно использовать -provider=aws.cross-account с 0.12.10. но, возможно, стоит попробовать посмотреть, помогает ли это чему-то. 01.11.2019
  • @ydaetskcoR, который выдает другую ошибку, см. правку выше. 03.11.2019

Ответы:


1

Я думаю, вы должны взять на себя роль второго аккаунта следующим образом.

provider "aws" {
  assume_role {
    role_arn     = "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"
    session_name = "SESSION_NAME"
    external_id  = "EXTERNAL_ID"
  }
}

[1]: https://www.terraform.io/docs/providers/aws/index.html

03.11.2019
  • Если вы прочтете ту же ссылку, то увидите, что это необязательно, так что это нормально. 04.11.2019
  • Да, это необязательно, но вы можете применить accept_role другой учетной записи. Вот в чем суть. 05.11.2019
  • У них уже есть установка бита предполагаемой роли. Вы только что добавили 2 необязательных поля для принятия роли, которая вам совсем не нужна и предназначена только для идентификации сеанса в CloudTrail. 05.11.2019

  • 2

    У меня такая же ошибка при попытке импортировать сертификат AWS acm.

    В качестве первого шага перед импортом ресурса вам необходимо создать его конфигурацию в корневом модуле (или другом соответствующем модуле):

    resource "aws_acm_certificate" "cert" {
      # (resource arguments)
    }
    

    Или вы получите следующую ошибку:

    Ошибка: адрес ресурса aws_acm_certificate.cert не существует в конфигурации.

    Затем вы можете импортировать ресурс, указав его соответствующий arn:

    $ terraform import aws_acm_certificate.cert <certificate-arn>
    

    Как @ydaetskcoR, упомянутый в комментариях - вам не нужно брать на себя роль второй учетной записи, если вы используете v0.12.10+.

    Но Terraform действительно нужны учетные данные для доступа ко второй учетной записи - поэтому, пожалуйста, убедитесь, что вы предоставили учетные данные соответствующей учетной записи (а не учетные данные исходной учетной записи), иначе вы застрянете с
    Error: Cannot import non-existent remote object
    на несколько часов, как я. (:

    28.07.2020
    Новые материалы

    Представляем Narwhal Technologies (Nrwl)
    6 декабря 2016 г. Маунтин-Вью, Калифорния С тех пор, как Виктор Савкин и я (Джефф Кросс) присоединились к команде Angular в Google на заре Angular 1, Angular продемонстрировал феноменальный..

    Путь AWS  — «Изучение машинного обучения — 10 начинающих ИИ и машинного обучения на AWS».
    Универсальный ресурсный центр для изучения искусственного интеллекта и машинного обучения. НОЛЬ или ГЕРОЙ, начните свое путешествие здесь. Получите решения и пройдите обучение у экспертов AWS...

    5 простых концепций Python, ставших сложными
    #заранее извините 1) Переменные x = 4 y = 5 Переменная в Python — это символическое представление объекта. После присвоения некоторого объекта переменной Python мы приобретаем..

    «Освоение вероятности: изучение совместной, предельной, условной вероятности и теоремы Байеса —…
    Виды вероятности: Совместная вероятность Предельная вероятность Условная вероятность Диаграмма Венна в вероятностях: В “Set Theory” мы создаем диаграмму Венна...

    Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
    Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

    Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
    Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..