
Содержание
- Триаж: от симптома к первой проверке
- Что изменилось в BTP с 2024 по 2026 год
- Проблема 1: 401 Unauthorized с учётными данными из ключа сервиса
- Проблема 2: Internal Server Error при открытии Integration Suite
- Проблема 3: Сломанная навигация и мёртвые ссылки
- Проблема 4: Сбои destination в приложениях CAP
- Проблема 5: Приложения, которые останавливаются за ночь в trial и free tier
- Часто задаваемые вопросы
Если 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 для OData | cds.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 нет.
Что проверять, по порядку:
- Тип гранта. Технический доступ к большинству API сервисов BTP использует
client_credentials. Задайте его в Postman явно. Не доверяйте значению по умолчанию. - URL токена. Берите его из ключа сервиса. В одних ключах есть
tokenurl; в других указанurlXSUAA, к которому нужно добавить/oauth/token. Никогда не заимствуйте его из другого субаккаунта. - Заголовки. Для прямого вызова токена отправляйте
Content-Type: application/x-www-form-urlencodedиAuthorization: Basic <base64(clientid:clientsecret)>. - Полномочия (authorities). При client credentials токен несёт только те scope, которые выданы этому экземпляру сервиса. Если API нужна роль, которой у экземпляра нет, вы всё равно получите токен, а API всё равно ответит отказом. Исправляйте это в параметрах экземпляра (например, в ролях экземпляра плана API Integration Suite), а не в запросе.
- Аудитория (audience). Если токен у вас есть, а API его отклоняет, декодируйте токен и прочитайте claim
aud. Если он не совпадает с API, который вы вызываете, вы используете ключ от не того экземпляра сервиса.
Вы открываете Integration Suite и видите красный баннер «Internal Server Error». Журнала нет. Перезагрузка, другой браузер, тот же результат.
Обычно это случается после того, как сервис какое-то время не использовался: открыли утром, оставили на несколько часов, потом вернулись. Обсуждения в сообществе SAP и база знаний указывают на две обычные причины: отсутствующие коллекции ролей и устаревшие сессии.
Что обычно помогает:
- Проверьте коллекции ролей. Вашему пользователю нужна
Integration_Provisioner, чтобы настроить тенант, и соответствующие коллекции ролейPI_(администратор, разработчик интеграции, бизнес-эксперт), чтобы работать в нём. Назначьте их в субаккаунте в разделе Security. - Полностью выйдите из системы. Изменения ролей доходят до вашей сессии только после нового входа. Закройте все вкладки BTP и Integration Suite, выйдите, затем войдите снова.
- Очистите cookie для доменов BTP, если ошибка сохраняется после нового входа. Устаревшая cookie сессии может пережить саму сессию.
- Используйте одну сессию Cockpit. Несколько вкладок или профилей браузера на одном субаккаунте вызывают конфликты сессий, которые выглядят в точности как эта ошибка.
Настоящая проблема в видимости. Cockpit ничего не сообщает о том, что именно сломалось, поэтому приходится гадать. Лучше пройдите список по порядку. Более широкий взгляд на то, почему интеграционные программы буксуют, есть в моей статье о задержках поставки SAP Integration Suite.
Вы нажимаете «Go to Application» и получаете пустой экран, общую стартовую страницу или перенаправление, в котором нет никакого смысла.
Здесь есть закономерности:
- Ссылки бустеров ломаются, когда настройка субаккаунта меняется после запуска бустера. Перенаправление указывает туда, чего уже нет.
- Плитки Integration Suite то работают, то выдают ошибку, то отваливаются по таймауту, обычно по описанным выше причинам, связанным с сессиями.
- Ссылки SAP Build Work Zone показывают «connection denied», когда подписка существует, а у вашего пользователя нет коллекции ролей для сайта.
- Несколько вкладок или профилей браузера открывают ссылки в истёкших контекстах.
Что работает: ходите по дереву 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. Большинство сбоев связано с разрывом где-то в этой цепочке.
- cds.requiresОбъявляет удалённый сервис, его kind и имя destination
- Профиль productionХранит учётные данные destination после деплоя
- Привязки сервисовПриложение привязано к Destination и XSUAA
- Destination в CockpitТо же имя, что в cds.requires и xs-app.json, с учётом регистра
- Удалённый сервис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 дней, если вы регулярно входите в систему. С вашим приложением всё в порядке. Его база данных спит.
Что помогает:
- Перезапустите экземпляр HANA Cloud из SAP HANA Cloud Central, прежде чем начинать отлаживать код.
- Используйте CLI (
cf apps,cf services), чтобы увидеть потребление памяти и сервисов. Интерфейс Cockpit показывает гораздо меньше. - Удаляйте неиспользуемые экземпляры сервисов, прежде чем создавать новые. Квоты trial действуют на весь аккаунт, а не на одно приложение.
- Держите демонстрационные и тестовые нагрузки в отдельных субаккаунтах.
Если вам нужно, чтобы надёжно работало больше одного приложения и базы данных, или нужна стабильная доступность для демонстраций, переходите на продуктивный аккаунт. Тарифы 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: позже эти тарифы можно перевести на платные, ничего не перестраивая.
Следующий шаг
Ведёте ERP-программу прямо сейчас?
Если эта статья затронула программу, в которой вы участвуете прямо сейчас, 30-минутный разговор обычно даёт больше, чем ещё неделя внутреннего анализа.




