Настройка Terraform с использованием AWS с одной учетной записью для нескольких сред - PullRequest
0 голосов
/ 06 марта 2020

Каков наилучший способ настройки terraform для нескольких сред (dev, stage, prod) в AWS только с одной учетной записью. Мой клиент предоставил нам только одну учетную запись. Большинство комментариев об использовании terraform всегда начинаются с использования нескольких учетных записей, которых у меня нет. Я планирую использовать внутреннее хранилище S3, поскольку некоторые из нас будут поддерживать инфраструктуру.

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Вы не должны разделять среды, используя разные регионы. Существуют регионы для повышения устойчивости системы в случае, например, временного сбоя в конкретном c центре обработки данных.

Также наличие пользовательских переменных среды не поможет вам, потому что у вас в конечном итоге будет дублирование кода.

Ваша северная звезда должна иметь точную копию двух сред и избегать дублирования кода. Terraform поможет вам в этом, потому что имеет концепцию рабочих пространств . Таким образом, вы будете использовать ту же конфигурацию и можете изменять среду с помощью одной команды, например terraform workspace select staging/dev/production

0 голосов
/ 06 марта 2020

Это будет работать в большинстве случаев использования

Вариант 1: регионы использования

Преимущество состоит в том, что вещи разделяются в консоли и вызовах API. Вам нужно будет обработать несколько глобальных именованных сервисов, таких как IAM и S3, но посмотрите вариант 2 решения. Кроме того, убедитесь, что во всех регионах есть необходимые вам услуги.

Например:

  • us-east-1: prod
  • us-east-2: qa
  • us-west-2: dev

В каждом регионе создайте корзину S3 для хранения ваших файлов состояния. Что-то вроде tfstate-01234567890-us-east-1, tfstate-01234567890-us-east-2, tfstate-01234567890-us-west-1 обеспечит отсутствие конфликтов.

Вариант 2: использовать тег окружения

Даже если вы используете вариант 1, я все же рекомендую также реализовать это. Это позволит вам выполнять такие действия, как развертывание нескольких сред разработки.

Для каждого ресурса добавьте среду к имени и добавьте среду к тегам.

Допустим, вы создали модуль

variable environment {
  type = string
}
resource aws_lambda_function image_handler {
  function_name = "cool-function-${var.environment}"
  tags = {
    environment: var.environment
  }
... 

Тогда вы бы

module dev {
  source = "../path/to/above/module"
  environment = "prod"
}
...