test_stand/crud: из README и комментариев убрана вся история (try, «раньше»)
README читает человек впервые — ему нужны структура, шаги запуска и операции, а не разбор прошлых костылей. Удалено: - раздел «Почему нельзя создать всё одним apply» с историей про try() и PGPASSWORD; - упоминания try() в apps/lucee.tf, apps/flask.tf, apps/nodejs.tf; - «data-source/backend» из apps/locals.tf и путь к удалённому разделу из pg/outputs.tf. Заодно удалён старый TEST_STAND/CRUD/terraform.tfvars (не читается, значения перенесены в pg/terraform.tfvars и apps/terraform.tfvars). Проверено: terraform validate — Success в pg/ и apps/ (apps — с временным creds.json).
This commit is contained in:
@@ -19,19 +19,6 @@ CRUD/
|
|||||||
| **БД — общий ресурс** | к одному кластеру можно подключить сколько угодно папок-потребителей: `apps/`, потом ещё `my-service/`, `reporting/` и т.д. |
|
| **БД — общий ресурс** | к одному кластеру можно подключить сколько угодно папок-потребителей: `apps/`, потом ещё `my-service/`, `reporting/` и т.д. |
|
||||||
| **Разные жизненные циклы** | приложения пересоздаются сколько угодно раз, БД живёт всё это время |
|
| **Разные жизненные циклы** | приложения пересоздаются сколько угодно раз, БД живёт всё это время |
|
||||||
|
|
||||||
Если держать PG и приложения в одном state, `terraform destroy` снесёт **и кластер
|
|
||||||
с данными**. Именно поэтому база вынесена отдельно.
|
|
||||||
|
|
||||||
### 🎯 Почему нельзя создать всё одним `apply`
|
|
||||||
|
|
||||||
Пароль пользователя БД генерирует платформа и отдаёт его в выходе кластера
|
|
||||||
`vault_secrets["users"]` — **только после** операции `create_user`. При создании
|
|
||||||
всё одним `apply` приложения запрашивали пароль, когда его ещё не существовало,
|
|
||||||
и поднимались с пустым `PGPASSWORD` (раньше это маскировалось функцией `try()`).
|
|
||||||
|
|
||||||
Теперь порядок явный: **сначала БД отдельным прогоном, потом приложения** — пароль
|
|
||||||
к этому моменту существует и лежит в файле `apps/creds.json`. Костыль `try()` убран.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📋 Порядок запуска (по шагам)
|
## 📋 Порядок запуска (по шагам)
|
||||||
@@ -72,14 +59,11 @@ terraform output -json > ../apps/creds.json
|
|||||||
**Что делает:** выгружает хост БД, порт, имя пользователя, имя базы и пароль в файл
|
**Что делает:** выгружает хост БД, порт, имя пользователя, имя базы и пароль в файл
|
||||||
`apps/creds.json`. Папка `apps/` читает этот файл (см. `apps/locals.tf`).
|
`apps/creds.json`. Папка `apps/` читает этот файл (см. `apps/locals.tf`).
|
||||||
|
|
||||||
**Почему файлом, а не «само»:** `pg/` и `apps/` — разные состояния Terraform
|
**Почему файлом:** `pg/` и `apps/` — разные состояния Terraform, значения между ними
|
||||||
(разные `terraform.tfstate`), между ними значения автоматически не передаются:
|
сами не передаются.
|
||||||
у провайдера нет data-source, а общего backend в стенде нет. Поэтому креды
|
|
||||||
передаются явной выгрузкой outputs — зато видно, что и откуда берётся.
|
|
||||||
|
|
||||||
> ⚠️ В `creds.json` пароль **в открытом виде**. Файл добавлен в `apps/.gitignore`.
|
> ⚠️ В `creds.json` пароль **в открытом виде**. Файл добавлен в `apps/.gitignore`.
|
||||||
> Не коммитить и не пересылать. Если пароль ротировали (пересоздали пользователя
|
> Не коммитить и не пересылать. Если пользователя БД пересоздавали — повторите шаг 2.
|
||||||
> в `pg/`) — повторите шаг 2, файл надо обновить.
|
|
||||||
|
|
||||||
### Шаг 3. Приложения — папка `apps/`
|
### Шаг 3. Приложения — папка `apps/`
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,7 @@
|
|||||||
# Flask — Python-приложение (CRUD, та же БД и таблица, что у Lucee/Node.js)
|
# Flask — Python-приложение (CRUD, та же БД и таблица, что у Lucee/Node.js)
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
#
|
#
|
||||||
# Креды БД — из creds.json (выгрузка outputs папки ../pg/), см. apps/locals.tf.
|
# Креды БД приходят из файла apps/creds.json (см. apps/locals.tf).
|
||||||
# try() не нужен: пароль уже существует к моменту этого apply.
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
resource "nubes_flask" "appflask" {
|
resource "nubes_flask" "appflask" {
|
||||||
|
|||||||
@@ -13,9 +13,8 @@ locals {
|
|||||||
# 2) cd ../pg && terraform output -json > ../apps/creds.json
|
# 2) cd ../pg && terraform output -json > ../apps/creds.json
|
||||||
# 3) cd ../apps && terraform apply
|
# 3) cd ../apps && terraform apply
|
||||||
#
|
#
|
||||||
# Почему через файл: pg/ и apps/ — РАЗНЫЕ state, Terraform между ними значения
|
# Почему через файл: pg/ и apps/ — РАЗНЫЕ состояния Terraform, значения между
|
||||||
# сам не передаёт (data-source у провайдера нет, общего backend тоже нет).
|
# ними сами не передаются. Поэтому креды передаются явной выгрузкой outputs → файлом.
|
||||||
# Поэтому креды передаются явной выгрузкой outputs → файлом.
|
|
||||||
#
|
#
|
||||||
# Структура creds.json (так отдаёт `terraform output -json`):
|
# Структура creds.json (так отдаёт `terraform output -json`):
|
||||||
# { "pg_host": { "sensitive": false, "type": "string", "value": "..." }, ... }
|
# { "pg_host": { "sensitive": false, "type": "string", "value": "..." }, ... }
|
||||||
|
|||||||
@@ -2,9 +2,7 @@
|
|||||||
# Lucee — CFML-приложение (CRUD в общей таблице crud_items)
|
# Lucee — CFML-приложение (CRUD в общей таблице crud_items)
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
#
|
#
|
||||||
# Креды БД приходят из файла, выгруженного из ../pg/ (см. apps/locals.tf).
|
# Креды БД приходят из файла apps/creds.json (см. apps/locals.tf).
|
||||||
# Никакого try() здесь нет и не нужно: пароль к моменту этого apply уже существует
|
|
||||||
# в файле, потому что БД создана ОТДЕЛЬНЫМ прогоном в папке ../pg/.
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
resource "nubes_lucee" "applucee" {
|
resource "nubes_lucee" "applucee" {
|
||||||
|
|||||||
@@ -2,8 +2,7 @@
|
|||||||
# Node.js — Express-приложение (CRUD, та же БД и таблица, что у Lucee/Flask)
|
# Node.js — Express-приложение (CRUD, та же БД и таблица, что у Lucee/Flask)
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
#
|
#
|
||||||
# Креды БД — из creds.json (выгрузка outputs папки ../pg/), см. apps/locals.tf.
|
# Креды БД приходят из файла apps/creds.json (см. apps/locals.tf).
|
||||||
# try() не нужен: пароль уже существует к моменту этого apply.
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
resource "nubes_nodejs" "appnodejs" {
|
resource "nubes_nodejs" "appnodejs" {
|
||||||
|
|||||||
@@ -14,10 +14,9 @@
|
|||||||
# Папка apps/ читает creds.json (см. apps/locals.tf). Файл содержит пароль —
|
# Папка apps/ читает creds.json (см. apps/locals.tf). Файл содержит пароль —
|
||||||
# он в .gitignore папки apps/.
|
# он в .gitignore папки apps/.
|
||||||
#
|
#
|
||||||
# ВАЖНО про порядок: outputs вычисляются В КОНЦЕ apply, уже после того как
|
# ВАЖНО про порядок: outputs вычисляются В КОНЦЕ apply, после того как созданы
|
||||||
# созданы кластер, пользователь и база. Поэтому `terraform output -json` сразу
|
# кластер, пользователь и база — поэтому `terraform output -json` сразу после
|
||||||
# после первого apply отдаёт реальный пароль (в отличие от vault_secrets внутри
|
# первого apply отдаёт реальный пароль.
|
||||||
# одного прогона — см. README, раздел «Почему нельзя одним apply»).
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
output "pg_host" {
|
output "pg_host" {
|
||||||
|
|||||||
Reference in New Issue
Block a user