Перейти к содержанию

Проблемы SAP BTP Cockpit: пять случаев и как их исправить

Пять проблем SAP BTP Cockpit повторяются снова и снова: ошибки 401 с токеном, ошибки Integration Suite, мёртвые ссылки, сбои destination в CAP и приложения в trial, которые останавливаются за ночь. Вот что проверять в первую очередь в каждом случае.

Разработчик со спины печатает код на мониторе рядом с ноутбуком
Содержание
  1. Триаж: от симптома к первой проверке
  2. Что изменилось в BTP с 2024 по 2026 год
  3. Проблема 1: 401 Unauthorized с учётными данными из ключа сервиса
  4. Проблема 2: Internal Server Error при открытии Integration Suite
  5. Проблема 3: Сломанная навигация и мёртвые ссылки
  6. Проблема 4: Сбои destination в приложениях CAP
  7. Проблема 5: Приложения, которые останавливаются за ночь в trial и free tier
  8. Часто задаваемые вопросы

Если SAP BTP Cockpit выдаёт вам ошибки, скорее всего, причина одна из пяти. Ошибка 401 при работе с ключом сервиса почти всегда связана с OAuth-запросом, а не с учётными данными. Internal Server Error в Integration Suite обычно означает отсутствующие коллекции ролей или устаревшую сессию. Мёртвые ссылки появляются из-за бустеров (boosters), настроенных до того, как субаккаунт изменился. Сбои destination в CAP чаще всего вызваны несовпадением имени или отсутствующей привязкой. А приложение, которое вчера работало в trial-аккаунте, могло за ночь потерять свою базу данных. Это руководство для разработчиков и консультантов по интеграции, работающих в субаккаунтах Cloud Foundry. Таблица триажа ниже подскажет, что проверять в первую очередь.

Когда я впервые увидел красный баннер с ошибкой в SAP BTP Cockpit, я решил, что сам что-то сделал не так. Не та ссылка, истекшая сессия.

После третьего или четвёртого раза стало ясно, что дело не только во мне.

В следующие несколько недель я вёл блокнот и записывал каждый случай, когда что-то ломалось. Internal Server Error при открытии Integration Suite. Destination, которые выглядели корректно и отказывались подключаться. Приложения, которые вчера работали, а сегодня зависали. Проступили закономерности. Мало какие из них были где-то толково описаны, а сам Cockpit почти ничего не даёт для работы.

СимптомНаиболее вероятная причинаЧто проверить первым
401 Unauthorized при вызове API с ключом сервисаНеверный тип гранта, URL токена или отсутствующие полномочияДекодируйте токен и прочитайте aud и scope
Internal Server Error при открытии Integration SuiteОтсутствующие коллекции ролей или устаревшая сессияКоллекции ролей у вашего пользователя, затем полный выход из системы
Бустер или плитка открывает пустую или не ту страницуСубаккаунт изменился после запуска бустераПереходите через дерево Cockpit
Приложение CAP: «destination not found» или ошибки аутентификацииНесовпадение имени, отсутствующая привязка, неверный kind для ODatacds.requires и xs-app.json в сравнении с именем в Cockpit
Приложение вчера работало, сегодня зависает (trial)Экземпляр HANA Cloud остановился за ночьСтатус экземпляра базы данных в SAP HANA Cloud Central

Cloud Foundry, Kyma и среда ABAP работают на мультиоблачной основе SAP, которая с 2020 года используется для новых клиентов по умолчанию. Более старая среда Neo получает только обновления безопасности и соответствия требованиям, а её закрытие SAP назначила на 31 декабря 2028 года. Почти все проблемы ниже относятся к Cloud Foundry.

Два переименования до сих пор сбивают с толку тех, кто читает старые руководства. SAP Launchpad service в январе 2023 года стал SAP Build Work Zone, standard edition. А многие плитки и бустеры были перестроены по мере роста SAP Build, поэтому скриншоты 2022 года часто уже не совпадают с тем, что вы видите.

В RISE with SAP BTP обычно поступает как право на использование, основанное на кредитах, внутри контракта. Cockpit тот же самый. Различается то, кто в вашей организации управляет глобальным аккаунтом, поэтому найдите этого человека до того, как вам понадобится новое право на использование.

Вы создаёте экземпляр сервиса, генерируете ключ сервиса, копируете client ID и secret в Postman, добавляете URL токена и отправляете запрос. 401. Без подробностей.

Вы копируете secret ещё раз. Всё равно сбой. С сервисом всё в порядке. С потоком OAuth нет.

Что проверять, по порядку:

  1. Тип гранта. Технический доступ к большинству API сервисов BTP использует client_credentials. Задайте его в Postman явно. Не доверяйте значению по умолчанию.
  2. URL токена. Берите его из ключа сервиса. В одних ключах есть tokenurl; в других указан url XSUAA, к которому нужно добавить /oauth/token. Никогда не заимствуйте его из другого субаккаунта.
  3. Заголовки. Для прямого вызова токена отправляйте Content-Type: application/x-www-form-urlencoded и Authorization: Basic <base64(clientid:clientsecret)>.
  4. Полномочия (authorities). При client credentials токен несёт только те scope, которые выданы этому экземпляру сервиса. Если API нужна роль, которой у экземпляра нет, вы всё равно получите токен, а API всё равно ответит отказом. Исправляйте это в параметрах экземпляра (например, в ролях экземпляра плана API Integration Suite), а не в запросе.
  5. Аудитория (audience). Если токен у вас есть, а API его отклоняет, декодируйте токен и прочитайте claim aud. Если он не совпадает с API, который вы вызываете, вы используете ключ от не того экземпляра сервиса.

Вы открываете Integration Suite и видите красный баннер «Internal Server Error». Журнала нет. Перезагрузка, другой браузер, тот же результат.

Обычно это случается после того, как сервис какое-то время не использовался: открыли утром, оставили на несколько часов, потом вернулись. Обсуждения в сообществе SAP и база знаний указывают на две обычные причины: отсутствующие коллекции ролей и устаревшие сессии.

Что обычно помогает:

  1. Проверьте коллекции ролей. Вашему пользователю нужна Integration_Provisioner, чтобы настроить тенант, и соответствующие коллекции ролей PI_ (администратор, разработчик интеграции, бизнес-эксперт), чтобы работать в нём. Назначьте их в субаккаунте в разделе Security.
  2. Полностью выйдите из системы. Изменения ролей доходят до вашей сессии только после нового входа. Закройте все вкладки BTP и Integration Suite, выйдите, затем войдите снова.
  3. Очистите cookie для доменов BTP, если ошибка сохраняется после нового входа. Устаревшая cookie сессии может пережить саму сессию.
  4. Используйте одну сессию Cockpit. Несколько вкладок или профилей браузера на одном субаккаунте вызывают конфликты сессий, которые выглядят в точности как эта ошибка.

Настоящая проблема в видимости. Cockpit ничего не сообщает о том, что именно сломалось, поэтому приходится гадать. Лучше пройдите список по порядку. Более широкий взгляд на то, почему интеграционные программы буксуют, есть в моей статье о задержках поставки SAP Integration Suite.

Вы нажимаете «Go to Application» и получаете пустой экран, общую стартовую страницу или перенаправление, в котором нет никакого смысла.

Здесь есть закономерности:

  1. Ссылки бустеров ломаются, когда настройка субаккаунта меняется после запуска бустера. Перенаправление указывает туда, чего уже нет.
  2. Плитки Integration Suite то работают, то выдают ошибку, то отваливаются по таймауту, обычно по описанным выше причинам, связанным с сессиями.
  3. Ссылки SAP Build Work Zone показывают «connection denied», когда подписка существует, а у вашего пользователя нет коллекции ролей для сайта.
  4. Несколько вкладок или профилей браузера открывают ссылки в истёкших контекстах.

Что работает: ходите по дереву Cockpit (субаккаунт, затем Services, затем Instances and Subscriptions) и сохраняйте в закладки прямые URL для Integration Suite, destination и Work Zone. Используйте одну сессию в чистом профиле браузера. Когда ссылка отказывает каждый третий раз, вы перестаёте доверять платформе и начинаете строить обходные пути. Закладки: самый дешёвый обходной путь из всех. Если вы ещё осваиваетесь, базовая навигация разобрана в моём пошаговом руководстве по BTP Cockpit.

Вы деплоите приложение CAP, настраиваете destination в Cockpit, а запросы всё равно падают с «destination not found» или ошибками аутентификации. Destination в списке есть. Приложение работает. Сообщения об ошибках никуда толком не ведут.

Документация SAP по CAP ясно описывает, как это должно быть связано: удалённый сервис объявляется в cds.requires в package.json (или .cdsrc.json) с указанием kind, а имя destination записывается в credentials.destination. Приложению также нужны привязки к сервису Destination и к XSUAA. Большинство сбоев связано с разрывом где-то в этой цепочке.

Цепочка destination в CAPНеверное имя, отсутствующая привязка или неверный kind для OData рвут одно из звеньев, и ошибка редко говорит, какое именно.
  1. cds.requiresОбъявляет удалённый сервис, его kind и имя destination
  2. Профиль productionХранит учётные данные destination после деплоя
  3. Привязки сервисовПриложение привязано к Destination и XSUAA
  4. Destination в CockpitТо же имя, что в cds.requires и xs-app.json, с учётом регистра
  5. Удалённый сервисodata-v2 для сервиса V2, odata для V4

Запросы доходят до удалённого сервиса

СимптомРешение
Destination в списке есть, но приложение его не находитСравните имя в cds.requires и в маршрутах xs-app.json с именем в Cockpit символ в символ, включая регистр
Локально работает, после деплоя падаетПроверьте, что профиль [production] действительно содержит учётные данные destination и что приложение привязано к Destination и XSUAA
Удалённый сервис OData V2 возвращает ошибкиЗадайте kind равным odata-v2 для сервиса V2 и odata для V4. Используйте V4 везде, где обе стороны позволяют
Приложению UI5 нужен V2, а ваш сервис CAP на V4Добавьте плагин @cap-js-community/odata-v2-adapter. Старый @sap/cds-odata-v2-adapter-proxy объявлен устаревшим
Аутентификация не проходит при корректных учётных данныхНачните с OAuth2ClientCredentials или BasicAuthentication. SAML или распространение principal (principal propagation) используйте, только когда этого требует сценарий
Нет уверенности, что цель вообще доступнаНажмите «Check Connection» у destination в Cockpit, прежде чем отлаживать приложение

Команды, которые справляются с этим хорошо, ведут короткий чек-лист destination для каждого приложения. Не потому что настройка сложна. А потому что одно неверное допущение об имени, привязке или kind для OData молча приводит к сбою, и искать его приходится гораздо дольше, чем предотвращать.

SAP BTP Cockpit даёт очень мало обратной связи, когда что-то ломается. Отладка в основном идёт методом проб и ошибок. Знание закономерностей экономит часы.

Приложение CAP, которое вчера работало, теперь зависает. Ошибки нет. Cockpit показывает, что оно запущено. Вы перезапускаете его. Ничего.

Сначала проверьте базу данных. В собственном руководстве SAP по пробной версии HANA Cloud сказано, что экземпляры free tier останавливаются каждую ночь и их нужно запускать заново в каждый день работы. Сам trial-аккаунт действует до 90 дней, если вы регулярно входите в систему. С вашим приложением всё в порядке. Его база данных спит.

Что помогает:

  1. Перезапустите экземпляр HANA Cloud из SAP HANA Cloud Central, прежде чем начинать отлаживать код.
  2. Используйте CLI (cf apps, cf services), чтобы увидеть потребление памяти и сервисов. Интерфейс Cockpit показывает гораздо меньше.
  3. Удаляйте неиспользуемые экземпляры сервисов, прежде чем создавать новые. Квоты trial действуют на весь аккаунт, а не на одно приложение.
  4. Держите демонстрационные и тестовые нагрузки в отдельных субаккаунтах.

Если вам нужно, чтобы надёжно работало больше одного приложения и базы данных, или нужна стабильная доступность для демонстраций, переходите на продуктивный аккаунт. Тарифы free tier в продуктивном аккаунте можно перевести на платные без потери работы, чего trial-аккаунт не позволяет.

Почему я получаю ошибку 401 с учётными данными из ключа сервиса SAP BTP, даже когда они выглядят верными?

Почти всегда причина в OAuth-запросе, а не в учётных данных. Обычные причины: неверный тип гранта (для технического доступа используйте client_credentials), URL токена, не совпадающий с ключом сервиса, или неверные заголовки в вызове токена.

Если токен вы получаете, а API всё равно его отклоняет, декодируйте его. Проверьте, что claim aud соответствует API, и проверьте scope. При client credentials scope берутся из полномочий, выданных экземпляру сервиса, поэтому недостающие роли исправляйте в параметрах экземпляра.

Что вызывает Internal Server Error при открытии Integration Suite в BTP Cockpit?

Чаще всего отсутствующие коллекции ролей или устаревшая сессия. Убедитесь, что у вашего пользователя есть Integration_Provisioner и нужные коллекции ролей PI_. Затем закройте все вкладки BTP, выйдите и войдите снова, потому что новые роли применяются только после нового входа.

Если ошибка сохраняется, очистите cookie для доменов BTP и работайте в единственной сессии Cockpit. Несколько вкладок на одном субаккаунте вызывают ту же ошибку.

Почему моё приложение CAP не подключается к destination, который корректно отображается в Cockpit?

Обычно несовпадение имён. Имя destination в cds.requires и в маршрутах xs-app.json должно в точности совпадать с именем в Cockpit, включая регистр.

Если имя верное, проверьте, что приложение привязано и к сервису Destination, и к XSUAA, что профиль [production] содержит учётные данные и что kind соответствует удалённому сервису: odata-v2 для V2, odata для V4. Воспользуйтесь «Check Connection» в Cockpit, чтобы убедиться, что цель доступна.

Почему моё приложение в trial SAP BTP перестаёт работать за ночь?

В тарифах trial и free tier экземпляры SAP HANA Cloud останавливаются каждую ночь для экономии ресурсов. Ваше приложение продолжает работать, но не может достучаться до своей базы данных. Перезапускайте экземпляр в SAP HANA Cloud Central каждый день перед работой.

Используйте cf apps и cf services, чтобы проверить потребление памяти и сервисов, потому что квоты trial трудно увидеть в Cockpit. Удаляйте неиспользуемые экземпляры, прежде чем создавать новые.

Почему ссылки внутри бустеров и плиток ведут на пустые страницы?

Ссылки бустеров ломаются, когда структура субаккаунта меняется после запуска бустера. Перенаправление указывает на место, которого уже нет или которое так и не было полностью настроено.

Ходите по дереву Cockpit и сохраняйте в закладки прямые URL для Integration Suite, destination и SAP Build Work Zone. Не полагайтесь на навигацию, созданную бустером, для того, чем пользуетесь каждый день.

Когда стоит переходить с trial-аккаунта BTP на платный тариф?

Когда ограничения начинают отнимать у вас время. Если вы запускаете больше одного приложения или базы данных либо вам нужна стабильная доступность для демонстраций или тестов, trial создаёт больше трения, чем экономит.

Главный выигрыш: стабильность и более понятная картина ресурсов, а не новые функции. Хорошим промежуточным шагом станет продуктивный аккаунт с тарифами free tier: позже эти тарифы можно перевести на платные, ничего не перестраивая.

Noel D'Costa

Автор

Noel D'Costa

25 лет в ERP-программах на SAP и Oracle: авиация, госсектор, финансы, ритейл и производство. Начинал в финансах. Я помогаю руководству честно определять масштаб трансформации, спасать проблемные программы и строить системы, которые выдерживают первый год продуктивной эксплуатации.

Следующий шаг

Ведёте ERP-программу прямо сейчас?

Если эта статья затронула программу, в которой вы участвуете прямо сейчас, 30-минутный разговор обычно даёт больше, чем ещё неделя внутреннего анализа.