This commit is contained in:
“Naeel” 2026-03-11 17:32:40 +04:00
parent b4a72850e9
commit 1d58eea1ff
3 changed files with 96 additions and 1 deletions

2
.gitignore vendored
View File

@ -16,6 +16,8 @@ crash.log
# Provider plugins / caches
.terraform.d/
# *.tfvars
# Archives and build artifacts
*.zip
dist/

93
pg-list-python/README.md Normal file
View File

@ -0,0 +1,93 @@
# pg-list-python
Python-функция, которая читает из PostgreSQL и возвращает JSON. Таблица с демо-данными создаётся автоматически при первом вызове — никакой инициализации руками.
## Что тут есть
```
code/
catalog.py — функция list_products(event): SELECT из demo_products
requirements.txt — psycopg2-binary
function.tf — sless_function + sless_trigger + output
main.tf — конфигурация провайдера
variables.tf — token, pg_dsn
terraform.tfvars — значения переменных (не в git)
```
## Запуск
```bash
terraform init
terraform apply -auto-approve
curl -s $(terraform output -raw catalog_url)
```
Ответ:
```json
{
"products": [
{"id": 1, "name": "Ноутбук", "price": 89999.0},
{"id": 2, "name": "Мышь", "price": 1299.0},
{"id": 3, "name": "Клавиатура", "price": 3499.0},
{"id": 4, "name": "Монитор", "price": 32000.0}
],
"count": 4
}
```
## Переменные
| Переменная | Обязательна | Описание |
|---|---|---|
| `token` | ✅ | JWT-токен облака. Задаётся в `terraform.tfvars` |
| `pg_dsn` | — | DSN подключения к PostgreSQL. Дефолт — внутрикластерный адрес |
`terraform.tfvars` не коммитится в git. Минимальное содержимое:
```hcl
token = "ваш_jwt_токен"
```
## Как работает
```
terraform apply
→ загружает код в S3
→ kaniko собирает Docker-образ (pip install psycopg2-binary)
→ Deployment поднимается в кластере
→ Ingress публикует URL
GET /fn/<namespace>/product-catalog
→ рантайм вызывает list_products(event)
→ psycopg2 подключается к PostgreSQL
→ если таблица demo_products не существует — создаёт и заполняет демо-данными
→ возвращает JSON со списком
```
Таблица `demo_products` создаётся один раз — при первом GET. Повторные вызовы просто читают данные.
## Изменение данных
Функция только читает. Чтобы добавить/изменить записи — подключитесь к PostgreSQL напрямую:
```sql
INSERT INTO demo_products (name, price) VALUES ('Кабель', 499.00);
UPDATE demo_products SET price = 95000 WHERE name = 'Ноутбук';
```
## Пересборка если изменили код
```bash
terraform apply -replace=sless_function.product_catalog -auto-approve
```
## Удаление
```bash
terraform destroy -auto-approve
```
Таблица `demo_products` в PostgreSQL **не удаляется** — только k8s-ресурсы.

View File

@ -1 +1 @@
token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhdXRoLWFwaSIsInN1YiI6IjAxOTllMzI1LTFjZGYtN2NkYS05MzE5LWU1MzAyYTg1ZTI5MSIsImV4cCI6MTc4NjkzMjI2MCwiaWF0IjoxNzcxMzgwMjYwLCJqdGkiOiIzOTQ3ZTgyMy0yNjljLTQ0MTAtYmU0My1iNGVkNTc1Njg0ZTQiLCJhdXRoX3RpbWUiOjAsInR5cCI6IiIsImF6cCI6IiIsInNlc3Npb25fc3RhdGUiOiIiLCJhY3IiOiIiLCJhbGxvd2VkLW9yaWdpbnMiOm51bGwsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6bnVsbH0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpudWxsfX0sInNjb3BlIjoiIiwic2lkIjoiIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJuYW1lIjoiIiwiQ2xpZW50SUQiOiIiLCJncm91cHMiOm51bGwsInByZWZlcnJlZF91c2VybmFtZSI6IiIsImdpdmVuX25hbWUiOiIiLCJmYW1pbHlfbmFtZSI6IiIsImVtYWlsIjoidGF6ZXRAbmFyb2QucnUifQ.hzpIIqNWkKIoYUXDaLY7DLyGKH70rz0ZTqanv19qxF10i3N1t1g_KknA4Qsw1MduTyLzIz7y5SRSr4PSQ1gzR0vB_C0GudSFUhyBNNKkS4ClhRDWW9eN_IIEljbiJMLQi2L07XJ7Y5DQ0sIHRAPLkreCDFMKQ0yTCrKoScCJIDuUqzaTcOaX-hfjaxW8iV0SZMDxl0C5O3tke0btxkaLBaAcWH0V-1yu2r2m29fyU33FqikF0xAcDXiuZphfsrShKQYArZjKAphYCP_Vpmr-1sdjinkn8sPSk1qZny0rka8G6WVZUGaZSOnW8SYNLVUwdqtuQmK-Y18o7U0Suzrsjg"
token = "свой токен"