Terraform: развертывание одного веб-приложения для нескольких клиентов - PullRequest
0 голосов
/ 24 февраля 2019

В настоящее время я использую Terraform для развертывания приложения PHP в AWS.
Это приложение PHP развернуто как Сервис с использованием AWS ECS.

У меня есть несколько клиентов, использующих это приложение, и каждый клиент получает свою собственную копию системы со своей собственной конфигурацией как свою собственную службу - если хотите, белую метку.

Теперь, после небольшого исследования Terraform, я сконфигурировал мой код и создал следующую файловую структуру:

+---my-application
    |   shared.tf
    |   iam_policies.tf
    |   iam_roles.tf
    |   variables.tf
    |   web-apps.tf
    |   
    +---modules
    |   \---role
    |   |       main.tf
    |   |       outputs.tf
    |   |       variables.tf
    |   |       
    |   \---webapp
    |           main.tf
    |           variables.tf
    |           
    +---templates
            web_definition.tpl.json

Моя проблема заключается в файле web-apps.tf, который я использую как «клей»."для всех webapp модулей:

module "client_bob" {
  source = "modules/webapp"
  ...
}

module "client_alice" {
  source = "modules/webapp"
  ...
}

module "client_jane" {
  source = "modules/webapp"
  ...
}

module "client_rob" {
  source = "modules/webapp"
  ...
}

... Over 30 more client module blocks ...

Нет необходимости говорить, что это не очень хорошая настройка.
Он не масштабируется и также создает огромный .tfstateфайлы.

Однажды, когда я пытался использовать Consul в качестве бэкэнда, я получил сообщение об ошибке, в котором говорилось, что я достиг предела размера, разрешенного для значения Consul KV.

Как правильно подойти к этомупроблема?
Какова лучшая практика в этой ситуации?

Я посмотрел на все вопросы в разделе Подобные вопросы , когда писал этот, и все они вращаются.вокруг идеи использования мульфайлы tiple .tfstate, но я не совсем понимаю, как это решит мою проблему, любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 25 февраля 2019

Я делал подобные проекты с terragrunt, посмотрите.
Он родился, чтобы отвечать на ваши запросы.

веб-сайт oss https://github.com/gruntwork-io/terragrunt

Terragrunt - это тонкая оболочка для Terraform, которая предоставляет дополнительные инструменты для работы с несколькими модулями Terraform.https://www.gruntwork.io

В вашем случае вы можете легко управлять различными tfstate-файлами для каждого клиента.

Я также рекомендую управлять ролями, политиками или любыми другими ресурсами iam для каждого клиента.клиент, не смешивайте их.

Например, структура станет

(я полагаю, вы будете управлять различными средами для каждого клиента, верно?)

└── bob
    ├── prod
    │   ├── app
    │   │   └── terraform.tfvars
    ├── nonprod
        ├── app
            └── terraform.tfvars
└── alice
    ├── prod
    │   ├── app
    │   │   └── terraform.tfvars
    ├── nonprod
        ├── app
            └── terraform.tfvars

...

Позже, после того, как вы освоите команду terraform apply-all, она сделает развертывание более простым и легким.

Быстрый запуск

https://github.com/gruntwork-io/terragrunt-infrastructure-modules-example

https://github.com/gruntwork-io/terragrunt-infrastructure-live-example

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