Terraform: инфраструктура на уровне кода | страница 96



module "webserver_cluster" {

  source = "github.com/foo/modules//webserver-cluster?ref=v0.0.1"

  cluster_name           = "webservers-stage"

  db_remote_state_bucket = "(YOUR_BUCKET_NAME)"

  db_remote_state_key    = "stage/data-stores/mysql/terraform.tfstate"

  instance_type = "t2.micro"

  min_size      = 2

  max_size      = 2

}

Если вы хотите использовать разные версии модулей без возни с Git-репози­ториями, можете загрузить модуль из архива с кодом для этой книги (https://github.com/brikis98/terraform-up-and-running-code). Мне пришлось разбить этот адрес на части, чтобы он поместился на странице. Его следует записывать одной строкой:

source = "github.com/brikis98/terraform-up-and-running-code//

  code/terraform/04-terraform-module/module-example/modules/

  services/webserver-cluster?ref=v0.1.0"

Параметр ref позволяет указать определенную фиксацию Git по ее хешу SHA1, имя ветки или, как в данном примере, конкретный тег Git. В целом я советую использовать в качестве версий модулей теги. Имена веток нестабильны, так как вы всегда получаете последнюю фиксацию в заданной ветке, которая может меняться при каждом выполнении команды init, а хеши SHA1 выглядят малопонятными. Теги Git такие же стабильные, как и фиксации (на самом деле это просто указатели на фиксации), но при этом они позволяют применять удобные и разборчивые названия.

Особенно полезной схемой именования тегов является семантическое версио­нирование (http://semver.org). Это система управления версиями в формате MAJOR.MINOR.PATCH (например, 1.0.4) с отдельными правилами относительно того, как следует инкрементировать каждый элемент номера версии. Вы должны инкрементировать:

• версию MAJOR при внесении несовместимых изменений в API;

• версию MINOR при добавлении возможностей с соблюдением обратной совместимости;

• версию PATCH при исправлении ошибок с соблюдением обратной совместимости.

Семантическое версионирование позволяет донести до пользователей модуля, какого рода изменения вы внесли и как это сказывается на процессе обновления.

Поскольку вы обновили свою конфигурацию с использованием разных URL-адресов для разных версий вашего модуля, нужно заново выполнить команду terraforminit, чтобы загрузить его код:

$ terraform init

Initializing modules...

Downloading git@github.com:brikis98/terraform-up-and-running-code.git?ref=v0.1.0

for webserver_cluster...

(...)

На этот раз вы можете видеть, что Terraform загружает код модуля из Git, а не из вашей локальной файловой системы. Когда все будет готово, вы сможете выполнить команду apply как обычно.