В одном из моих недавних обязательств я должен был разработать подход к управлению инфраструктурой AWS в нескольких регионах, а также для различных сред, используя террафору.
Поскольку любой разрабатыватель Sane Copy-Tweak, я сделал «Google» для вдохновение Но завершил поиск контента, который решается частично, либо только для сценариев многорековых, либо многорегулируемых, либо не просмотрел (например, без изоляции состояния между регионами). Для всех в подобных потребностях здесь что-то построить.
Предварительные условия
Понимание Террафом и концепции Модули , Бэкэнды , Рабочие пространства , Удаленный штат & AWS Provider потребуется иметь смысл контента в этом посте:
Следующие инструменты потребуются для эксперимента с приведенным примерным кодом:
- Интерфейс командной строки AWS с доступом к AWS настроен
- Террафор
С чем мы должны играть?
Модуль
Терраформ модуль
Система помогает нам создавать настраиваемые шаблоны инфраструктуры, которые могут быть использованы по повторному использованию в различных средах ( Producty-A Развернуто для Разработка/производство ) Или через различные продукты (стандартные S3/Dynamodb/sns/etc шаблоны Несомненно
Отдохнуть
Терраформ Backend
Конфигурация для AWS S3
Удаленный штат использует следующие переменные конфигурации для организации состояния инфраструктуры:
Ведро
: ИмяS3
Ведро, где государство будет хранитьсяworkspace_key_prefix
: Пользовательский префикс на пути к файлу состоянияРабочая область
: имя рабочего пространстваключ
: Имя файла состояния
В S3
Затем государственный файл может быть расположен в <Ведро>/
Отказ Если мы заменим Рабочая область
с AP-Southeast-1 или AP-Southeast-2 , если мы заменим переменные workspace_key_prefix
с Продукт-а и ключ
с Terraform.tfstate Мы в конечном итоге с файлами состояний хранятся как:
bucket └──product-a ├──ap-southeast-1 │ └── terraform.tfstate └──ap-southeast-2 └── terraform.tfstate
Это устанавливает группирующие государства инфраструктуры на уровне продукта/проекта при установлении изоляции между развертываниями в разные регионы, сохраняя удобное хранение всех этих состояний в одном месте.
Подход
Использование модуля Terraform и Backend Systems, инфраструктура — асфальтированная линейка инфраструктуры — в качестве исходного кода, фрагмент конфигурации конфигурации конфигурации кода и террафора, описанная в разделе, описанная в разделе, дает нам способ:
- Установить структуру, в которой общий или инфраструктура продукта/проекта является шаблон для повторного использования в различных средах
- Тонкая настройка продукта/инфраструктура проекта на уровне окружающей среды, даже добавление инфраструктуры для окружающей среды для этих неидеальных случаев
- поддерживать состояние на уровне региона, чтобы мы могли иметь лучшую изоляцию, канареечное развертывание и т. Д.,
Источник
├── environments │ ├── development │ | ├── ap-southeast-1.tfvars │ | ├── ap-southeast-2.tfvars │ | ├── variables.tf │ | ├── main.tf │ | ├── provider.tf │ | ├── terraform.tf │ | └── terraform.tfvars │ ├── test │ | ├── ap-southeast-1.tfvars │ | ├── ap-southeast-2.tfvars │ | └── ... │ ├── stage │ | ├── ap-southeast-1.tfvars │ | └── ... │ └── production │ | └── ... └── modules ├── aws-s3 │ ├── main.tf │ ├── provider.tf │ └── variables.tf ├── product-a │ ├── main.tf │ ├── provider.tf │ └── variables.tf └── sub-system-x ├── main.tf ├── provider.tf └── variables.tf
среды
: Папка для изоляции различной среды ( Разработка / Тест / Этап / Производство ) Конкретная конфигурация. Это также помогает с гибкостью поддержания удельных инфраструктуры окружающей среды для тех, общих, неидеальных сценариев.модули
: Папка для хост-многоразовых ресурсов, сгруппированных при продукте/проекте или на уровне подсистемы или общих компонентов инфраструктуры. Эта папка не должна существовать в том же репозитории — она здесь делает здесь в качестве примера и может очень хорошо служить целю более чем горстки уши.
Конфигурации области региона управляются через их соответствующую <Рабочая область> .tfvars
файл. Например, Среда/Разработка/AP-Southeast-2.tfvars
Файл для AP-Southeast-2 регион в Развитие окружающая обстановка.
Также Terraform.tfvars
Файл нашел внутри Развитие / Тест / Этап / Производство папка под среды может быть использован для установки общей конфигурации для данной среды во всех регионах.
Конфигурация Backend
terraform { required_version = "~> 0.12.6" backend "s3" { bucket = "terraform-state-bucket" dynamodb_table = "terraform-state-lock-table" encrypt = true key = "terraform.tfstate" region = "ap-southeast-2" workspace_key_prefix = "product-a" } }
Примечание : Конфигурация, описанная в этом посте и включенном образца предполагает состояние состояния на окружающую среду. Но, если необходимость хранить состояние из всех сред в общем ведре, мы могли бы обновить workspace_key_prefix
Значение, чтобы включить в нее среда. Например, с Продукт-а/Развитие или Продукт-а/производство мы в конечном итоге с состоянием при следующем пути в S3
:
bucket └──product-a ├──development │ ├──ap-southeast-1 │ │ └── terraform.tfstate │ └──ap-southeast-2 │ └── terraform.tfstate └──production ├──ap-southeast-1 │ └── terraform.tfstate └──ap-southeast-2 └── terraform.tfstate
Репозиторий
Источник для настройки образца можно найти в здесь Отказ
Работа с настройкой
Перейдите к папке окружающей среды, Развитие
Например, на терминале. Примечание: Предполагается, что рабочая конфигурация для доступа к окружающей среде AWS
Инициализировать террафору
Чтобы начать, сначала инициализируйте свою местную информацию о состоянии террафора
terraform init
Перечислите доступные рабочие пространства
terraform workspace list
Создайте новое рабочее пространство (если оно уже не существует)
#terraform workspace newterraform workspace new ap-southeast-2
Выберите рабочее пространство
#terraform workspace selectterraform workspace select ap-southeast-2
Планировать и применять изменения
#terraform plan -var-file=.tfvars #terraform apply -var-file= .tfvars terraform plan -var-file=ap-southeast-2.tfvars terraform apply -var-file=ap-southeast-2.tfvars
Повторите для других регионов
Для AP-Southeast-1 область, край:
terraform workspace new ap-southeast-1 terraform workspace select ap-southeast-1 terraform plan -var-file=ap-southeast-1.tfvars terraform apply -var-file=ap-southeast-1.tfvars
Надеюсь, эта записка помогает излучить!
Оригинал: «https://dev.to/sdileep/manage-a-multi-environment-multi-region-infrastructure-on-aws-using-terraform-1p2p»