Я также в состоянии миграции существующей инфраструктуры AWS терраформировать так будет стремиться обновить ответ, как я развиваться.
Я сильно полагаться на официальных терраформировать examples и множественные пробы и ошибки, чтобы конкретизировать области, которые я был неопределенным.
.tfstate файлы
Terraform конфигурация может быть использован для предоставления много ящиков на различной инфраструктуре, каждая из которых может иметь другое состояние. Так как он также может управляться несколькими людьми, это состояние должно находиться в централизованном месте (например, S3), но не git.
Это можно подтвердить, посмотрев на Terraform .gitignore
.
управление Разработчиком
Наша цель состоит в том, чтобы обеспечить больший контроль над инфраструктурой разработчиков, сохраняя при этом полный аудит (журнал мерзавец) и возможность проверки вменяемости изменений (выдвижные запросы). Имея это в виду, новый рабочий процесс инфраструктуры, к которому я стремился, является следующим:
- Основание общего ОМИ, которое включает в себя повторно используемые модули, например. кукольный.
- Основная инфраструктура, предоставляемая DevOps с использованием Terraform.
- Разработчики меняют конфигурацию Terraform в Git по мере необходимости (количество экземпляров, новый VPC, добавление региона/зоны доступности и т. Д.).
- Конфигурация Git нажата и запрос на тяну, представленный для проверки, проверен членом команды DevOps.
- В случае одобрения, вызывает webhook к CI для построения и развертывания (не знаете, как разметить несколько сред в это время)
Edit 1 - Обновленная информация о текущем состоянии
С начала этот ответ у меня есть написал много кода TF и чувствовал себя более комфортно в нашем положении дел. У нас есть проблемы с ошибками и ограничениями, но я согласен, что это характерно для использования нового, быстро меняющегося программного обеспечения.
Layout
Мы имеем сложную инфраструктуру AWS с множественным VPC-х каждый с несколькими подсетями. Ключом к легкому управлению этим было определение гибкой таксономии, которая охватывает регион, окружающую среду, сервис и владельца, которые мы можем использовать для организации нашего кода инфраструктуры (как терраформи, так и марионетки).
Модули
Следующий шаг должен был создать единый репозиторий для хранения наших модулей терраформировать. Наша структура высшего уровня реж для модулей выглядит следующим образом:
tree -L 1 . . ├── README.md ├── aws-asg ├── aws-ec2 ├── aws-elb ├── aws-rds ├── aws-sg ├── aws-vpc └── templates
Каждый устанавливает некоторые умолчанию разумны, но выставляет их как переменные, которые могут быть перезаписаны нашим «клей».
Клей
У нас есть второе хранилище с нашей glue
, что делает использование модулей, упомянутых выше. Она выложена в соответствии с нашей систематики документа:
. ├── README.md ├── clientA │ ├── eu-west-1 │ │ └── dev │ └── us-east-1 │ └── dev ├── clientB │ ├── eu-west-1 │ │ ├── dev │ │ ├── ec2-keys.tf │ │ ├── prod │ │ └── terraform.tfstate │ ├── iam.tf │ ├── terraform.tfstate │ └── terraform.tfstate.backup └── clientC ├── eu-west-1 │ ├── aws.tf │ ├── dev │ ├── iam-roles.tf │ ├── ec2-keys.tf │ ├── prod │ ├── stg │ └── terraform.tfstate └── iam.tf
Внутри уровня клиента мы имеем AWS счета конкретных .tf
файлов, что предоставление глобальных ресурсов (например, IAM ролей); далее - уровень региона с открытыми ключами EC2 SSH; Наконец, в нашей среде (dev
, stg
, prod
и т. Д.) Хранятся наши настройки VPC, создание экземпляров и пиринговые соединения и т. Д.
Боковое примечание: Как вы можете видеть, я иду против собственного совета, поддерживая terraform.tfstate
в git. Это временная мера, пока я не перейду на S3, но мне подходит, поскольку я в настоящий момент единственный разработчик.
Следующие шаги
Это по-прежнему ручной процесс, а не в Дженкинс, но пока мы портирование довольно большой, сложной инфраструктуры и до сих пор так хорошо. Как я уже сказал, мало ошибок, но все идет хорошо!
Edit 2 - Изменения
Это было почти год, так как я написал этот первоначальный ответ и состояние как терраформировать и сам существенно изменились. Теперь я нахожусь на новой позиции, используя Terraform для управления кластером Azure, а Terraform теперь - v0.10.7
.
государственный
Люди неоднократно говорили мне государство должно не идти в Git - и они правильны. Мы использовали это как временную меру с командой из двух человек, которая полагалась на коммуникацию и дисциплину разработчика. С более крупной распределенной командой мы теперь полностью задействуем дистанционное состояние в S3 с locking, предоставляемое DynamoDB. В идеале это будет перенесено в консул, теперь это v1.0, чтобы сократить поставщиков перекрестных облаков.
Модули
Ранее мы создали и использовали внутренние модули. Это все еще так, но с появлением и ростом Terraform registry мы стараемся использовать их как минимум как базу.
Файловая структура
Новое положение имеет гораздо более простую таксономию с только две infx среды - dev
и prod
. Каждый из них имеет свои собственные переменные и выходы, повторно используя наши модули, созданные выше. Поставщик remote_state
также помогает распределять ресурсы созданных ресурсов между средами. Наш сценарий - это субдомены в разных группах ресурсов Azure для глобального домена TLD.
├── main.tf ├── dev │ ├── main.tf │ ├── output.tf │ └── variables.tf └── prod ├── main.tf ├── output.tf └── variables.tf
Планирование
Опять с дополнительными проблемами распределенной команды, теперь мы всегда сохранять наш вывод команды terraform plan
. Мы можем проверять и знать, что будет работать без риска каких-либо изменений между стадиями plan
и apply
(хотя блокировка помогает в этом). Не забудьте удалить этот файл плана, поскольку он потенциально может содержать текстовые «секретные» переменные.
В целом мы очень довольны Terraform и продолжаем учиться и совершенствовать новые функции.
Были ли у вас везение/проблем, так как это ответ? Твоя кажется очень похожей на то, что я собираюсь сделать, но ты можешь быть дальше, чем я. –
приятно! Я все еще не в состоянии реализовать на моей стороне, мы очищаем некоторые другие вещи, но это потрясающе, чтобы знать некоторые вещи, которые нужно делать/избегать. –
Мне любопытно, почему вы думаете, что файлы tfstate не должны храниться в git? Это просто потому, что старое государство не стоит экономить, или есть другие проблемы? – agbodike