Рабочий процесс для нескольких разработчиков с общей базой данных Terraform - PullRequest
0 голосов
/ 03 июня 2019

Я новичок, работаю в команде, которая делает много кода TF как часть разработки. Состояние TF сохраняется в удаленном сегменте S3. Завершая свою работу в моей собственной ветке, я понял, что мои объекты TF развернуты из моей ветки

resource "aws_s3_bucket" "b" {
  bucket = "my-tf-test-bucket"
  acl    = "private"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

будет удален другим разработчиком, потому что он использует свою собственную ветку, в которой нет этого объекта. Действительно, когда он применил свою терраформу, он получил это:

$ terraform apply -target=module.s3
aws_s3_bucket.b: Refreshing state... (ID: my-tf-test-bucket)

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  - destroy
Terraform will perform the following actions:
  - module.s3.aws_s3_bucket.b
Plan: 0 to add, 0 to change, 1 to destroy.

Как этот тип работы должен быть структурирован с точки зрения передового опыта? Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

У нас есть разные среды разработки, которые создаются для каждого разработчика (у нас есть две в настоящее время).Для этого часто мы будем ставить ресурсы перед некоторым идентификатором (переменная, которая устанавливается через командную строку, которая берется в главном файле terraform), чтобы не было конфликтов между различными средами, находящимися в одной учетной записи.После того, как изменения одобрены, они перемещаются в нашу среду CI, которая развертывает только те изменения, которые произошли после dev (изменения автоматизируются конвейером и никогда не выполняются dev).Вы не должны делиться таким же общим состоянием в среде разработки, поскольку вы часто сталкиваетесь с проблемой, с которой сталкиваетесь.

Я не обязательно уверен, что это лучшийтренируйтесь или нет, но у нас это хорошо работает.

0 голосов
/ 04 июня 2019

Стратегия, которой мы придерживались, была: 1. Назовите бэкэнд-контейнер s3 с проектом и регионом, в котором развернуты ресурсы 2. Разделите регионы между разработчиками, которые работают одновременно

Таким образом,Tfstate хранится в разных сегментах на разработчика.Конечно, между разработчиками должно быть устное соглашение, чтобы успешно это сделать.Если команда слишком велика для этого, я думаю, что вы можете сделать, это включить идентификатор пользователя в имя бэкэнда.

...