Основня задача этого шага - создание базовой инфраструктуры для развертывания облачных окружений, разграничения доступа и реализации подхода Infrastructure-as-Code.
-
ID организации;
-
ID платежного акаунта;
-
установленная утилита командной строки YC CLI, сконфигурированный профиль;
-
учетная запись, от имени которой будет выполняться этот шаг, должна иметь роли:
organization-manager.organizations.owner
- владелец организации
или
resource-manager.admin
на организацию (создавать, редактировать и удалять облака и каталоги, а также управлять доступом к ним);billing.accounts.editor
на платежный аккаунт (привязывать облака и сервисы к платежному аккаунту).
- Инициализируйте Terraform в каталоге
0-bootstrap
terraform init
- Создайте файл
terraform.tfvars
в каталоге0-bootstrap
и задайте в нем значения входных параметров
organization_id = "ID_ВАШЕЙ_ОБЛАЧНОЙ_ОРГАНИЗАЦИИ"
billing_account_id = "ID_ВАШЕГО_ПЛАТЕЖНОГО_АКАУНТА"
root_organization_admins = [ "YANDEX_ID_АДМИНИСТРАТОРА", "YANDEX_ID...", ... ]
- Проверьте корректность конфигурации и предполагаемый план выполнения. Это помогает выявить возможные ошибки не дожидаясь фактического применения
terraform validate
terraform plan
- Примените конфигурацию из каталога
0-bootstrap
terraform apply
После успешного применения конфигурации в каталоге 0-bootstrap
будет создано несколько файлов для настройки профиля утилиты YC
.
- Для создания профиля используйте скрипт
.create-profile-ИМЯ_СЕРВИСНОГО_АККАУНТА.sh
. При необходимости вы можете его редактировать и запускать вручную. Чтобы создать профиль в терминале выполните:
./.create-profile-ИМЯ_СЕРВИСНОГО_АККАУНТА.sh
Будет выведено сообщение:
Profile 'ИМЯ_СЕРВИСНОГО_АККАУНТА' created and activated.
- Для активации профиля и настройки переменных окружения используйте
.activate-profile-ИМЯ_СЕРВИСНОГО_АККАУНТА.sh
. Его так же можно редактировать при необходимости. Чтобы активировать профиль в терминале выполните:
source ./.activate-profile-ИМЯ_СЕРВИСНОГО_АККАУНТА.sh
Будет выведено сообщение: Profile 'ИМЯ_СЕРВИСНОГО_АККАУНТА' activated.
Важно:
- Выполняйте команду команду
source ...
, приведенную выше, каждый раз, когда планируете применять конфигурацию с полномочиями уровня организации.- Время жизни IAM-токена сервисного аккаунта составляет не более 12 часов, его необходимо периодически обновлять. Для этого также регулярно выполняйте команду
source ...
.
- получите значение выходного параметра
backend_tf
, командой
terraform output backend_tf
Результат:
<<EOT
terraform {
backend "s3" {
region = "ru-central1"
bucket = "bootstrap-****" # вместо **** будут случайные символы
key = "bootstrap"
dynamodb_table = "state-lock-table"
endpoints = {
s3 = "https://storage.yandexcloud.net",
dynamodb = "https://docapi.serverless.yandexcloud.net/ru-central1/****/****" # вместо **** будут параметры вашего подключения
}
skip_credentials_validation = true
skip_region_validation = true
skip_requesting_account_id = true
skip_s3_checksum = true
}
}
EOT
- создайте в каталоге
0-bootstrap
файлbackend.tf
, вставьте в него текст между строками с тэгомEOT
(строки сEOT
не копировать!). - иницализируйте переменные окружения
AWS_ACCESS_KEY_ID
иAWS_SECRET_ACCESS_KEY
значениями из созданного файла.env
:
source ./.env
Либо, если вы используете сервисный акаунт и выделенный профиль YC
, то выполните:
source ./.activate-profile-ИМЯ_СЕРВИСНОГО_АККАУНТА.sh
- Перенесите Terraform state
terraform init -migrate-state
На вопрос Do you want to copy existing state to the new backend?
введите на клавиатуре yes
(либо используйте в командной строке дополнительный флаг -auto-approve
).
После применения конфигурации в организации будут созданы:
- Группа
org-admin
с рольюorganization-manager.admin
на всю организацию. В эту группу добавлены паспортные учетные записи, указанные в параметреroot_organization_admins
. Используйте эту группу для включения в нее паспортных или федеративных учетных записей глобальных администраторов. - Облако
bootstrap
и каталогiac
, содержащий:-
Бакет
bootstrap-****
для сохранения состояния Terraform (вместо **** - 4 случайных символа для обеспечения уникальности имени бакета). -
Сервисный аккаунт
bootstrap-terraform-sa
с правамиorganization-manager.admin
на всю организацию иstorage.admin
на в каталогеiac
.Вы можете использовать этот аккаунт для настройки инструментов CICD.
Статический ключ этого аккаунта, необходимый для для инициализаии переменных окружения
AWS_ACCESS_KEY_ID
иAWS_SECRET_ACCESS_KEY
, сохранен в локальный файл.env
. При использовании внешнего CICD настройте инициализацию переменных окружения значениями из файла.env
.
-