Терраформирование, импортирующее ресурс по индексу

#terraform

Вопрос:

Моя терраформа пытается создать следующие ресурсы корзины s3.

   # module.storage.module.s3_bucket[14].aws_s3_bucket.this[0] will be created
    resource "aws_s3_bucket" "this" {
        acceleration_status         = (known after apply)
        acl                         = "private"
        arn                         = (known after apply)
        bucket                      = "assets-bucket"
        bucket_domain_name          = (known after apply)
        bucket_regional_domain_name = (known after apply)
        force_destroy               = false
        hosted_zone_id              = (known after apply)
        id                          = (known after apply)
        region                      = (known after apply)
        request_payer               = (known after apply)
        website_domain              = (known after apply)
        website_endpoint            = (known after apply)

        server_side_encryption_configuration {
            rule {
                apply_server_side_encryption_by_default {
                    sse_algorithm = "AES256"
                }
            }
        }

        versioning {
            enabled    = (known after apply)
            mfa_delete = (known after apply)
        }
    }

  # module.storage.module.s3_bucket[14].aws_s3_bucket_public_access_block.this[0] will be created
    resource "aws_s3_bucket_public_access_block" "this" {
        block_public_acls       = false
        block_public_policy     = false
        bucket                  = (known after apply)
        id                      = (known after apply)
        ignore_public_acls      = false
        restrict_public_buckets = false
    }

 

Я пытаюсь импортировать корзину в свой файл состояния. Однако, похоже, мне не удается импортировать эти данные. Предположительно, ему не нравится индекс. Хотя документы, которые я просматриваю, показывают, что это должно сработать.

 terraform import  module.storage.module.s3_bucket[14].aws_s3_bucket.this  assets-bucket --state=./terraform.tfstate
zsh: no matches found: module.storage.module.s3_bucket[14].aws_s3_bucket.this

# this attempt also fails
terraform import  module.storage.module.s3_bucket[14].aws_s3_bucket.this[0] assets-bucket --state=./terraform.tfstate
zsh: no matches found: module.storage.module.s3_bucket[14].aws_s3_bucket.this[0]
 

Ответ №1:

Современные оболочки рассматривают квадратные скобки как часть команды оболочки, а не как ввод в другой скрипт/приложение. Вот почему вы получаете ошибку от zsh , а не от Терраформирования.

 zsh: no matches found: module.storage.module.s3_bucket[14].aws_s3_bucket.this
 

Если вы заключите значение в одинарные кавычки, оно будет рассматриваться как аргумент import вместо команды ZSH.

 terraform import  'module.storage.module.s3_bucket[14].aws_s3_bucket.this'  assets-bucket --state=./terraform.tfstate
 

Если вам интересно, что он делает, когда вы не помещаете ' его вокруг, запустите set -x включить режим отладки, где он напечатает, что ZSH делает со всеми аргументами.

Используйте set x , чтобы выключить его.

Комментарии:

1. Спасибо! также я узнал, что опция —state появляется после «импорта терраформ», а не в конце.