Oracle Cloud: PHP скрипт, когда сильно хочется бесплатный VPS 4 ядра ARM/24ГБ памяти

от автора

Крайне заманчивая конфигурация была недавно анонсирована в рамках доступа «Всегда бесплатно». К сожалению, «очень быстро разбирают», а именно — сложно запустить экземпляр, постоянно вылазит ошибка “Out of Capacity”. Здесь мы решаем эту проблему, так как Oracle время от времени наращивает ёмкость.

Каждый арендатор получает бесплатно первые 3000 часов условных ЦП и 18 000 ГБ-часов в месяц для создания экземпляров Ampere A1 Compute с использованием конфигурации VM.Standard.A1.Flex (эквивалентно 4 условным ЦП и 24 ГБ памяти).

Подход, описанный здесь, требует PHP 7.4 и composer. Будет вызываться метод “LaunchInstance” (конечная точка OCI API). Мы используем пакет, который я разработал и опубликовал некоторое время назад, вот статья https://habr.com/ru/post/541894/

Если вам ближе использование консольной утилиты, соответствующую инструкцию я опубликовал ранее https://habr.com/ru/post/568368/

Генерируем ключи доступа к API

Уже описал ранее в таком же разделе https://habr.com/ru/post/568368/

Изменяем файл скрипта

После клонирования репозитория

git clone https://github.com/hitrov/oci-arm-host-capacity.git

и запуска

cd oci-arm-host-capacity/ composer install

нужно изменить аргументы, передаваемые в конструктор OciConfig (файл index.php).

  1. Аргументы 1–5 (regionusertenancyfingerprintpath to private key) следует взять из текстового поля во время генерации ключей (начало статьи).

  2. Для получения аргументов 6–8 (availabilityDomainsubnetIdimageId) следует инициировать создание экземпляра из веб-браузера (консоли) Oracle Cloud (Menu -> Compute -> Instances -> Create Instance).

    Поменяйте образ и тип (shape), убедитесь, что домен доступности (Availability Domain) – с плашкой “Always Free Eligible”.

Измените также секцию «Networking» — установите чекбокс «Do not assign a public IPv4 address». Важно: если вы ранее не создавали экземпляр M.Standard.E2.1.Micro, сделайте это прямо сейчас, перед всем этим (две штуки оных предоставляются бесплатно) – нам нужны существующие VNC, subnet, route table, security list и т.д.

Секция “Add SSH keys” нас здесь пока не интересует. До клика по кнопке “Create”…

…откройте инструменты разработчика в браузере (вкладка «Сеть»). Теперь жмите “Create” и подождите немного — получите ошибку “Out of capacity”. Найдите вызов конечной точки /instances (красный)…

кликните по нему правой кнопкой мыши и выберите «скопировать как curl». Вставьте содержимое в любой текстовый редактор, посмотрите на параметр —data-binary. Найдите availabilityDomainsubnetIdimageId. Используйте их как аргументы 6,7 and 8, соответственно – конструктора OciConfig.

OciConfig также имеет два последних опциональных аргумента – ocpus и memoryInGBs соответственно. По умолчанию они равны 4 и 24. Разумеется, можете их изменить. Возможные варианты значений 1/6, 2/12, 3/18 and 2/24. В случае использования образа Oracle Linux Cloud Developer обратите внимание, что он требует как минимум 8 ГБ ОЗУ.

3. Чтобы иметь безопасный зашифрованный доступ к экземпляру, нужно иметь сгенерированную пару ключей ~/.ssh/id_rsa и ~/.ssh/id_rsa.pub. Имя файла второго из них (публичного) должно быть передано в команду ниже. В сети достаточно инструкций, чтобы выполнить их генерацию, здесь мы опустим эту часть.

Запускаем скрипт

php /path/to/oci-arm-host-capacity/index.php

Ставлю на то, что ошибка будет такой же, как в браузере несколько минут назад

{     "code": "InternalError",     "message": "Out of host capacity." }

а может и

{     "code": "LimitExceeded",     "message": "The following service limits were exceeded: standard-a1-memory-count, standard-a1-core-count. Request a service limit increase from the service limits page in the console. " }

Теперь можно настроить периодический запуск, например

EDITOR=nano crontab -e

добавьте сюда новую строку (запуск каждую минуту и запись вывода в файл) со значением…

* * * * * /usr/bin/php /path/to/oci-arm-host-capacity/index.php > /path/to/script.log

…и сохраните.

Возможны случаи, когда пользователю cron не хватает определённых привилегий, простейший способ решить это — поместить код в директорию, доступную веб-серверу, например, /usr/share/nginx/html. И настроить crontab следующим образом

* * * * * curl http://server.add.re.ss/oci-arm-host-capacity/index.php

Можете посетить URL выше и увидеть тот же вывод, что из запуска команды в консоли.

В случае же успеха вывод будет похожим на

В этом случае скрипт создаст файл с таким же именем, как пользователь OCI (убедитесь, что директория имеет права на запись), и следующий запуск (итерация) будет прерван для этой конфигурации OciConfig. Разумеется, сам экземпляр появится в облачной консоли (браузере).

Я убеждён, что достаточно безопасно оставить cron запущенным и периодически (раз в несколько дней) заходить и проверять состояние экземпляров в браузере. Потому что в случае успеха вы, как правило, всё равно не сможете создать больше экземпляров, чем разрешено, а вместо этого станете получать ошибки, как выше.

Во всяком случае, именно так происходило у меня.

Если же вы перешли на тариф с оплатой по мере использования (Pay as you go), вам следует решить, как остановить вызовы OCI CLI (API) в случае успеха – чтобы не «попасть» на определеную сумму. Например, вы могли бы…

oci compute instance list --compartment-id $C

…периодически проверять вывод этой команды, чтобы знать, в какой момент cron должен быть отключен. Это не относится напрямую к проблеме, которую мы здесь решаем.

Назначаем публичный IP адрес

Уже описал ранее в таком же разделе https://habr.com/ru/post/568368/

Заключение

Вот, как вы будете логиниться в экземпляр после его создания (обратите внимание на имя пользователя — opc)

ssh -i ~/.ssh/id_rsa opc@ip.add.re.ss

Если же вы не назначили внешний (публичный) IP адрес, вы всё равно можете подключиться, используя его внутреннее доменное имя (internal FQDN) или частный (private) IP адрес (10.x.x.x) со страницы Instance Details, если экземпляр находится в той же сети VNIC, например,

ssh -i ~/.ssh/id_rsa opc@instance-20210714-xxxx.subnet.vcn.oraclevcn.com

Спасибо, что прочли!

ссылка на оригинал статьи https://habr.com/ru/post/568386/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *