Terraform и S3 - Как загрузить файлы в существующее ведро - PullRequest
0 голосов
/ 24 апреля 2019

Как вы загружаете файлы в существующую корзину s3 (созданную из инфраструктуры terraform), не уничтожая содержимое корзины или заново создавая корзину.

terraform {
  backend "s3" {
    bucket = "terraformtests"
    key    = "terraformstate.tf"
    region = "us-east-1"
  }
}


resource "aws_s3_bucket_object" "terraformtests" {
  bucket = "terraformtests"
  key    = "test/prod/1000/keys"
  source = "deploy"
  etag   = "${md5(file("keys"))}"

}

Это то, что у меня есть.Он отлично работает при первом запуске и загружает его в пространство ключей «1000».Когда я редактирую его и перезагружаю с 1001, скрипт пытается уничтожить ранее созданный файл в test / prod / 1000 / keys.Все, что я хочу сделать, это

  • Импорт существующего состояния таблицы без его воссоздания
  • Добавление папок в пространства ключей, не затрагивая предыдущее содержимое таблицы.

1 Ответ

0 голосов
/ 02 июля 2019

Результат, который вы получаете от Terraform.

TF поддерживает «состояние» инфраструктуры в .tfstate файлах. Они являются зеркальным отражением того, какой была инфраструктура в прошлый раз, когда они были синхронизированы.

Желаемое состояние инфраструктуры описано в .tf файлах.

Выполнение команд terraform plan или terraform apply сравнивает файлы .tf и .tfstate . Затем любые ресурсы, которые присутствуют в .tfstate , а не в .tf , уничтожаются .

В вашем случае он имеет пространство клавиш 1000 в .tfstate от предыдущего запуска, но не в .tf , потому что вы отредактировали его до 1001 .

Пути вокруг этого

  1. Используйте AWS CLI , как предложено в комментарии Уинстона
  2. Добавьте еще один ресурс для клавиши 1001 вместо редактирования того, который у вас есть

Кроме того, я заметил, что у вас есть

source = "deploy"
etag = "${md5(file("keys"))}"

Обычно они должны ссылаться на один и тот же файл:

source = "readme.md"
etag = "${filemd5("readme.md")}"
...