Files
tf_provider/generated/test/docs/getting-started.md
T

292 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Начало работы с Nubes Terraform (TEST)
Это руководство поможет вам установить Terraform и развернуть первую инфраструктуру в облаке Nubes (тестовый стенд).
## 0. Установка Terraform
Версия 1.0 или выше.
1. **Скачать**: [hashicorp.com/terraform/install](https://developer.hashicorp.com/terraform/install) или [Yandex Cloud Mirror](https://hashicorp-releases.yandexcloud.net/terraform/) (без VPN)
2. **Установить**: распаковать, положить `terraform` в `PATH`
3. **Проверить**: `terraform -version`
---
## 1. Конфигурация провайдера
Создайте `main.tf`:
```hcl
terraform {
required_providers {
nubes = {
source = "registry.kube5s.ru/nubes-test/nubes"
version = "5.1.2"
}
}
}
provider "nubes" {
api_endpoint = "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc"
api_token = var.api_token
}
variable "api_token" {
type = string
sensitive = true
}
```
!!! info "TEST стенд"
- Личный кабинет: [https://deck-test.ngcloud.ru/dashboard/](https://deck-test.ngcloud.ru/dashboard/)
- API: `https://lk-api-gateway-test.ngcloud.ru/api/v1/svc`
!!! tip "Безопасность"
Не храните токен в `main.tf`. Используйте `terraform.tfvars` или переменные окружения.
---
## 2. Получение API токена
1. Зайдите в Личный кабинет → Профиль → Токены
2. Нажмите «Выпустить тех-токен»
3. **Сохраните токен** — он показывается только один раз
Создайте `terraform.tfvars`:
```hcl
api_token = "eyJhbGciOi..." # Ваш токен
```
---
## 3. Команды Terraform
### `terraform init`
Загружает провайдер. Выполняется **один раз** при старте проекта. При смене версии — `terraform init -upgrade`.
```bash
terraform init
```
### `terraform plan`
Показывает что будет создано/изменено/удалено. Безопасно, ничего не меняет.
```bash
terraform plan
```
### `terraform apply`
Применяет изменения. Создаёт/меняет/удаляет ресурсы в облаке.
```bash
terraform apply
# или сразу без подтверждения:
terraform apply -auto-approve
```
### `terraform destroy`
Удаляет ВСЕ ресурсы из манифеста.
```bash
terraform destroy
```
!!! warning "Suspend vs Destroy"
По умолчанию `terraform destroy` **не удаляет** инстанс — переводит в `Suspend`. См. раздел 5.
### `terraform state list` / `terraform state show`
Просмотр ресурсов под управлением Terraform.
```bash
terraform state list
terraform state show nubes_postgres.baza
```
---
## 4. Примеры ресурсов
### PostgreSQL
Скопируйте из [примера PostgreSQL](postgres_example.md) — заполните `TODO` своими значениями.
```hcl
resource "nubes_postgres" "baza" {
resource_name = "pg-tst01"
cluster_configuration {
cpu = 500
memory = 512
replicas = 1
disk = 10
}
startup_configuration {
resource_realm = "k8s-3-sandbox-nubes-ru"
}
access_configuration {
master_access_list = jsonencode(["10.0.0.0/8"])
master_ip_space = "no-needed"
slave_access_list = jsonencode([])
slave_ip_space = "no-needed"
}
postgres_configuration {
version = "17"
ssl_required = true
pooler_master = false
pooler_slave = false
}
backup_configuration {
s3_uid = "UUID-вашего-S3" # Обязательно
retain = 7
schedule = "0 0 * * *"
}
autoscale_configuration {
enabled = false
schedule = 0
percent = 10
quota = 100
}
}
```
### S3 Bucket
```hcl
resource "nubes_s3bucket" "my_files" {
resource_name = "bucket_0"
bucket_name = "my-unique-bucket-name"
s3_user_uid = "UUID-вашего-S3"
}
```
Подробные примеры — в разделе **Ресурсы** (левое меню), вкладка **Example** у каждого ресурса.
---
## 5. Suspend, Adopt и жизненный цикл
Провайдер **не удаляет** инстансы при `terraform destroy` по умолчанию. Вместо этого переводит в `Suspend`.
### `suspend_on_destroy` (по умолчанию `true`)
| Значение | `terraform destroy` | Удаление из манифеста |
|----------|--------------------|-----------------------|
| `true` | Инстанс → `Suspend` | Инстанс → `Suspend` |
| `false` | Только удаление из state | Только удаление из state |
### `adopt_existing_on_create` (по умолчанию `false`)
| Значение | Поведение при `apply` |
|----------|-----------------------|
| `false` | Если инстанс уже есть → ошибка |
| `true` | `running` → adopt под управление; `suspended` + совпадение параметров → resume + adopt |
### `operation_timeout`
Таймаут ожидания операции. По умолчанию `"10m"`. Для долгих операций можно увеличить:
```hcl
operation_timeout = "15m"
```
!!! warning "Один инстанс — один state"
Не подключайте один инстанс к двум манифестам — получите конфликт управления.
---
## 6. Связка сервисов (Lucee + PostgreSQL)
```hcl
resource "nubes_postgres" "db2" {
resource_name = "pg-tst0"
startup_configuration {
resource_realm = "k8s-3-sandbox-nubes-ru"
}
cluster_configuration {
cpu = 500
memory = 512
replicas = 1
disk = 10
}
access_configuration {
master_access_list = jsonencode(["10.0.0.0/8"])
master_ip_space = "no-needed"
slave_access_list = jsonencode([])
slave_ip_space = "no-needed"
}
postgres_configuration {
version = "17"
ssl_required = true
pooler_master = false
pooler_slave = false
}
backup_configuration {
s3_uid = "UUID-вашего-S3"
retain = 7
schedule = "0 0 * * *"
}
autoscale_configuration {
enabled = false
schedule = 0
percent = 10
quota = 100
}
}
resource "nubes_lucee" "app1" {
resource_name = "lucy1"
resource_realm = nubes_postgres.db2.startup_configuration.resource_realm
domain = "web03"
git_path = "https://github.com/user/repo.git"
json_env = jsonencode({
testds_class = "org.postgresql.Driver"
testds_bundleName = "org.postgresql.jdbc"
testds_bundleVersion = "42.6.0"
testds_connectionString = "jdbc:postgresql://$${nubes_postgres.db2.state_out_flat[\"internalConnect.master\"]}:5432/postgres"
testds_username = nubes_postgres.db2.vault_secrets["adminUser"]
testds_password = nubes_postgres.db2.vault_secrets["adminPass"]
})
app_version = "5.4"
depends_on = [nubes_postgres.db2]
}
```
---
## 7. Типичный рабочий процесс
```bash
# 1. Клонируем/создаём проект
mkdir my-infra && cd my-infra
# 2. Создаём main.tf (скопировать из примера выше)
# 3. Создаём terraform.tfvars с токеном
# 4. Инициализация
terraform init
# 5. Проверка плана
terraform plan
# 6. Применение
terraform apply
# 7. При необходимости — удаление
terraform destroy
```