📓 Oracle Cloud — журнал настройки (CLI, авторизация, сеть)
О чём это
Пошаговый журнал того, как мы подготовили Oracle Cloud под тяжёлый CPU-прогон (обогащение обучающих данных фичей KCP — см. 🎓 KCP-фича — тактика против глубины поиска): установка CLI, авторизация, выбор региона и создание виртуальной сети. Цель двойная: воспроизводимость (можно повторить с нуля) и понимание (каждый шаг объяснён с нуля, для того кто с облаком не работал). Соседний Oracle Cloud — раннбук — сжатый operational how-to; этот документ — детальный разбор с реальными командами и результатами.
Термины на пальцах
OCI = Oracle Cloud Infrastructure (облако Oracle). Tenancy = твой аккаунт целиком (корневой контейнер всех ресурсов). Compartment = папка для группировки ресурсов; у нас всё в корневом (= tenancy). Регион = дата-центр (город). OCID = уникальный идентификатор ресурса вида
ocid1.<тип>.oc1.<регион>.<хэш>— как инвентарный номер.
1. Установка CLI (oci)
Ставим через mise глобально (не в проект — это инструмент оператора, а не зависимость сборки; см. рассуждение в Oracle Cloud — раннбук):
mise use -g "pipx:oci-cli@latest" # ставит официальный PyPI-пакет oci-cli в изолированный venv
oci --version # проверка: у нас 3.89.1Почему
pipx:oci-cli, а неmise use oci@latestКороткое имя
ociв реестре mise ведёт на community asdf-плагин;pipx:oci-cli— прямой официальный пакет Oracle без лишнего звена.-g= глобально: воспроизводимо и не засоряет ни один репозиторий.
Косметический варнинг на Python 3.14
oci-cli 3.89.1 на Python 3.14 печатает
SyntaxWarning: invalid escape sequence— безобидно, команда работает. Гаситсяexport PYTHONWARNINGS=ignore.
2. Авторизация
Самый дружелюбный способ — сессия через браузер (не надо вручную возиться с API-ключами и OCID):
oci session authenticateЧто происходит:
- Спрашивает регион (мы выбрали
35: eu-frankfurt-1, см. §3). - Открывает браузер → вход в свой OCI-аккаунт (SSO). Аккаунт остаётся у владельца — ключ/пароль никуда не копируются.
- Пишет профиль
DEFAULTв~/.oci/configс временным security-token.
# все дальнейшие команды используют этот токен:
oci iam region-subscription list --auth security_tokenПро токен и срок жизни
Токен живёт ~1 час (обновляется
oci session refresh). Нам это не мешает: токен нужен только чтобы запускать/гасить/настраивать ресурсы (секунды-минуты). Сам многочасовой прогон идёт на инстансе и от токена не зависит.
Гоча оболочки zsh
В zsh переменная без кавычек НЕ разбивается на слова:
A="--auth security_token"; oci ... $A→ oci получит--auth security_tokenодним аргументом и упадёт сNo such option. Пиши флаг дословно в каждой команде (или используй bash-массив). У нас это уронило первый прогон скрипта (ресурсы при этом не создались — проверилиvcn list).
3. Регион: eu-frankfurt-1
Выбран Франкфурт (индекс 35), потому что:
- ближайший крупный EU-регион к Латвии (низкая задержка, EU-резидентность данных);
- лучшая ёмкость Ampere A1 (наш CPU-шейп);
- на триал-аккаунте ресурсы создаются только в home-регионе (заданном при регистрации) — проверили:
region-subscription listпоказал единственныйeu-frankfurt-1 (READY).
Проверка готовности (всё read-only):
oci iam region-subscription list --auth security_token # → eu-frankfurt-1 READY
oci iam availability-domain list --compartment-id <tenancy> \
--auth security_token # → 3 AD (AD-1/2/3)
oci compute image list --compartment-id <tenancy> \
--shape VM.Standard.A1.Flex --operating-system "Canonical Ubuntu" \
--operating-system-version "22.04" --auth security_token # → Canonical-Ubuntu-22.04-aarch64 есть4. Виртуальная сеть — зачем и что это
Чтобы у будущей VM был публичный IP и её можно было достать по SSH, нужна сеть. Аналогия — свой мини-датацентр:
flowchart TB subgraph VCN["VCN 10.0.0.0/16 — твоя изолированная сеть"] SUB["Public Subnet 10.0.0.0/24<br/>(здесь будет VM с публичным IP)"] RT["Route Table<br/>0.0.0.0/0 → IG"] SL["Security List<br/>вход: SSH :22 · выход: всё"] end IG["Internet Gateway<br/>дверь в интернет"] NET(("Интернет")) SUB --- RT --- IG --- NET SUB --- SL
- VCN — большая изолированная приватная сеть (адреса
10.0.0.0/16), контейнер для всего. - Subnet — её срез (
10.0.0.0/24), где реально живут машины. Публичная = машинам можно выдать внешний IP. - Internet Gateway (IG) — «дверь» между VCN и публичным интернетом.
- Route Table — «указатель»: весь внешний трафик (
0.0.0.0/0) отправлять в дверь (IG). - Security List — «охранник/файрвол»: что впускать/выпускать. Впускаем только SSH (порт 22), выпускаем всё.
5. Команды, которыми мы создали сеть
--forceи--raw-output
--force— не спрашивать подтверждение (для скрипта).--raw-output— вернуть чистое значение (OCID) без кавычек, чтобы подставить в следующую команду. Каждый OCID проверяли, что начинается сocid1.(иначе стоп).
export PYTHONWARNINGS=ignore
TEN=<tenancy-OCID> # из ~/.oci/config, поле tenancy
# 1) VCN — приватная сеть-контейнер
VCN=$(oci network vcn create --compartment-id "$TEN" \
--cidr-blocks '["10.0.0.0/16"]' --display-name dicechess-oracle-vcn \
--dns-label dcvcn --auth security_token --query 'data.id' --raw-output)
# VCN создаётся с дефолтными route table и security list — берём их:
RT=$(oci network route-table list --compartment-id "$TEN" --vcn-id "$VCN" --auth security_token --query 'data[0].id' --raw-output)
SL=$(oci network security-list list --compartment-id "$TEN" --vcn-id "$VCN" --auth security_token --query 'data[0].id' --raw-output)
# 2) Internet Gateway — дверь в интернет
IG=$(oci network internet-gateway create --compartment-id "$TEN" --vcn-id "$VCN" \
--is-enabled true --display-name dicechess-oracle-ig --auth security_token --query 'data.id' --raw-output)
# 3) Маршрут: весь внешний трафик → IG
oci network route-table update --rt-id "$RT" --force --auth security_token \
--route-rules "[{\"destination\":\"0.0.0.0/0\",\"destinationType\":\"CIDR_BLOCK\",\"networkEntityId\":\"$IG\"}]"
# 4) Файрвол: впустить SSH :22, выпускать всё
oci network security-list update --security-list-id "$SL" --force --auth security_token \
--ingress-security-rules '[{"protocol":"6","source":"0.0.0.0/0","tcpOptions":{"destinationPortRange":{"min":22,"max":22}}}]' \
--egress-security-rules '[{"protocol":"all","destination":"0.0.0.0/0"}]'
# 5) Публичная subnet
SUBNET=$(oci network subnet create --compartment-id "$TEN" --vcn-id "$VCN" \
--cidr-block 10.0.0.0/24 --display-name dicechess-oracle-subnet --dns-label dcsub \
--route-table-id "$RT" --security-list-ids "[\"$SL\"]" --auth security_token --query 'data.id' --raw-output)Проверка: oci network subnet list --vcn-id "$VCN" --auth security_token → dicechess-oracle-subnet 10.0.0.0/24 AVAILABLE, публичная (prohibit-public-ip-on-vnic = False).
protocol":"6"— это TCPВ правилах OCI протокол задаётся номером IANA:
6= TCP,1= ICMP,17= UDP,all= любой. SSH — это TCP на порт 22.
SSH открыт с
0.0.0.0/0Впускаем SSH с любого адреса — но вход только по ключу (пароль отключён), а VM временная, так что риск низкий. Ужесточить = заменить
sourceна<твой-IP>/32(curl ifconfig.me). Мы оставили0.0.0.0/0, потому что сеть создана заранее, а IP дев-машины к моменту запуска может смениться.
6. Наши ресурсы (справочник, регион eu-frankfurt-1)
OCID — это идентификаторы, не секреты. Токены/SSH-ключи здесь НЕ хранятся.
| Ресурс | Имя | OCID (хвост) |
|---|---|---|
| VCN | dicechess-oracle-vcn | …e7fpl4pa |
| Internet Gateway | dicechess-oracle-ig | …7dn5xrmq |
| Route Table (default) | — | …fbgv5ndq |
| Security List (default) | — | …bzna5xkq |
| Subnet (public) | dicechess-oracle-subnet | …qrfendxa |
Полные OCID лежат локально в scratchpad/oracle-resources.txt (у оператора). Всё, кроме будущего compute-инстанса, бесплатно.
7. Что дальше
- Запуск VM (когда обогащение готово):
oci compute instance launchс--subnet-id <subnet> --assign-public-ip true --shape VM.Standard.A1.Flex …+ образCanonical-Ubuntu-22.04-aarch64. Пошагово — Oracle Cloud — раннбук §3–5. ПриOut of host capacityна A1 → другой AD или шейп E5 (x86). - Снос сети (если понадобится): удалять в обратном порядке — subnet → internet-gateway → (маршрут/правила очистятся с VCN) → vcn.
oci network vcn delete --vcn-id <vcn> --forceтребует пустой VCN.
Про деньги
Сеть бесплатна. Платит только запущенный compute-инстанс — по часам running (не по использованию CPU). Поэтому VM поднимаем строго под прогон и гасим сразу после (
oci compute instance terminate …), и ставим Budget alert в Console.
Связанные: Oracle Cloud — раннбук · 🎓 KCP-фича — тактика против глубины поиска · План усиления value-модели