Если вы хотите использовать разные версии модулей без возни с 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 такие же стабильные, как и фиксации (на самом деле это просто указатели на фиксации), но при этом они позволяют применять удобные и разборчивые названия.
Особенно полезной схемой именования тегов является
• версию MAJOR при внесении несовместимых изменений в API;
• версию MINOR при добавлении возможностей с соблюдением обратной совместимости;
• версию PATCH при исправлении ошибок с соблюдением обратной совместимости.
Семантическое версионирование позволяет донести до пользователей модуля, какого рода изменения вы внесли и как это сказывается на процессе обновления.
Поскольку вы обновили свою конфигурацию с использованием разных URL-адресов для разных версий вашего модуля, нужно заново выполнить команду terraforminit, чтобы загрузить его код:
$ terraform init
Initializing modules...
Downloading [email protected]:brikis98/terraform-up-and-running-code.git?ref=v0.1.0
for webserver_cluster...
(...)
На этот раз вы можете видеть, что Terraform загружает код модуля из Git, а не из вашей локальной файловой системы. Когда все будет готово, вы сможете выполнить команду apply как обычно.
Закрытые Git-репозитории
Если ваш модуль находится в закрытом Git-репозитории, чтобы применять этот репозиторий в качестве источника модуля, нужно позволить Terraform в нем аутентифицироваться. Рекомендую использовать аутентификацию SSH, чтобы не пришлось хранить учетные данные для доступа к репозиторию в самом коде. Каждый разработчик сможет создать SSH-ключ и привязать его к пользователю Git. После добавления ключа в ssh-agent Terraform будет автоматически использовать его для аутентификации, если в качестве URL источника указан SSH45.
URL-адрес источника должен выглядеть так:
[email protected]:
Например:
[email protected]:acme/modules.git//example?ref=v0.1.2
Чтобы проверить, корректно ли вы отформатировали URL, попробуйте клонировать базовый адрес в терминале с помощью git clone:
$ git clone [email protected]:
Если эта команда выполнится успешно, Terraform тоже сможет использовать ваш приватный репозиторий.
Теперь пройдемся по процессу внесения изменений в проекте с разными версиями модулей. Допустим, вы модифицировали модуль webserver-cluster и хотите проверить его в тестовой среде. Для начала изменения нужно зафиксировать в репозитории modules:
$ cd modules
$ git add .
$ git commit -m "Made some changes to webserver-cluster"
$ git push origin master
Затем в том же репозитории нужно создать новый тег:
$ git tag -a "v0.0.2" -m "Second release of webserver-cluster"
$ git push --follow-tags
Теперь вы можете перевести на новую версию
module "webserver_cluster" {
source = "[email protected]:foo/modules.git//webserver-cluster?ref=v0.0.2"
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
}
В промышленной среде (live/prod/services/webserver-cluster/main.tf) можно по-прежнему использовать версию v0.0.1 без всяких изменений:
module "webserver_cluster" {
source = "[email protected]:foo/modules.git//webserver-cluster?ref=v0.0.1"
cluster_name = "webservers-prod"
db_remote_state_bucket = "(YOUR_BUCKET_NAME)"
db_remote_state_key = "prod/data-stores/mysql/terraform.tfstate"
instance_type = "m4.large"
min_size = 2
max_size = 10
}
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии