# Буйная інфраструктура з Terraform

Крыніца: <https://github.com/antonbabenko/terraform-best-practices/tree/master/examples/large-terraform>

Гэты прыклад змяшчае код у якасці прыкладу структуравання канфігурацый Terraform для буйной інфраструктуры, якая выкарыстоўвае:

* 2 уліковыя запісы AWS
* 2 рэгіёны
* 2 асобныя асяроддзі (`prod` і `stage` якія нічога не падзяляюць). Кожнае асяроддзе знаходзіцца ў асобным акаўнце AWS і ахоплівае рэсурсы паміж 2 рэгіёнамі
* Кожнае асяроддзе выкарыстоўвае розную версію гатовага інфраструктурнага модуля (`alb`) з [Terraform Registry](https://registry.terraform.io/)
* Кожнае асяроддзе выкарыстоўвае аднолькавую версію ўнутранага модуля `modules/network` паколькі ён узяты з лакальнага каталога.

{% hint style="info" %}
У такім вялікім праекце, як апісаны тут, перавагі выкарыстання Terragrunt становяцца вельмі відавочнымі. Глядзіце [прыклады структур кода з Terragrunt](https://www.terraform-best-practices.com/be/examples/terragrunt).
{% endhint %}

{% hint style="success" %}

* Ідэальна падыходзіць для праектаў, дзе інфраструктура лагічна падзелена (асобныя ўліковыя запісы AWS)
* Добра, калі няма неабходнасці мадыфікаваць рэсурсы, якія падзяляюцца паміж уліковымі запісамі AWS (адна асяроддзе = адзін уліковы запіс AWS = адзін файл стану)
* Добра, калі няма неабходнасці ў аркестрацыі змен паміж асяроддзямі
* Добра, калі рэсурсы інфраструктуры ў кожным асяроддзі наўмысна адрозніваюцца і не могуць быць абагуленымі (напрыклад, некаторыя рэсурсы адсутнічаюць у адным асяроддзі або ў некаторых рэгіёнах)
  {% endhint %}

{% hint style="warning" %}
З ростам памераў праекта будзе ўсё цяжэй падтрымліваць гэтыя асяроддзі ў адзінстве. Разгледзьце магчымасць выкарыстання інфраструктурных модуляў (гатовых або ўнутраных) для паўтаральных задач.
{% endhint %}
