Enterprise MCP на Bedrock AgentCore з адміністрацыяй прыўязкі Okta SSO і Trino
Lambda OAuth-механізм, PKCE-рэлея, AgentCore-шлюз і асяроддзе выканання, а таксі каналы з’ўязку Trino на адзін корыстувальнік без вытэчкі спакаваных токеноў.
Крыніцы: Building Enterprise MCP on AWS Bedrock AgentCore: Okta SSO + Trino
У гэтым керавану практычным крокам перакладзена вся сяброўка, ад сырых матэраляў да рабочай сістэмы для стварэння Enterprise MCP на AWS Bedrock AgentCore: Okta SSO + Trino. Акцэнт ставіцца на крокі, якія можна выконваць, чысткія пераконтанні, а таксама код, які можна проста дадаць у рэпазітарый без неабясненняя меты. Для адгледзення, перш чым зменяць код, неабходна візначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аператары должны магчымае перадзваніць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць трываласць выканання і кост токенаў або запытаў разам з функцыйнальнымі рэзултатамі. Відразы костаў з самага пачатку запобегае неспадзяваным рахункам, калі сяброўка пераходзіць з дэмаверсіі ў спяльныя сераўы.
Короткая сутнасць
Короткая версія: перш чым зменяць код, неабходна дэфініцыя вхідных даных, адміністратара крока і крэтэрыяў завершэння. Аператары должны магчымае запускаць крок з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Канфігурацыю трэба залічыць параду ад коду прыкладнення. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаючы весь ланцуг задач. Неабходна выклікаць інструменты з вузкімі схемамі і чысткімі пазначэннямі побачных эфектаў. Хостам неабходна знаты, якія вызовы мутуюць стан, перш чым яны автаматычна схваляюць іх.
MCP Client → Lambda OAuth Proxy → Bedrock AgentCore Gateway → AgentCore Runtime → Trino
Чаму перэдача необработанага токена інструменту спрачыная неудачу перацэнкі ў корпаратыўных сістэмах
Кабы з’ясаваць, чаму перэдача необработанага токена інструменту спрачыная невыпанне парадактаў корпаратыву, перад змянай кода неабходна адзначыць вхідныя даны, абавесця крока і крытэрыі завершэння. Аперацыяныя працавнікі павінны магчымае перазапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабходна адзначыць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія перакрыцця і апрацоўка некорэктных паведамленняў ёсць часткай продукту, а не дадатковымі элементамі пасля яго стварэння. Інструменты з вузкімі схемамі і чыткімі пазначэннямі побачных наследкаў павінны быць доступныя. Хостам неабходна знаты, якія вызовы мутуюць стан, перш чым яны автаматычна схваляюць ўпраўленні.
Архітэктура адразу
Для стварэння кантролю над архітэктурай неабяжна ўзначыць вхідныя даны, адпаведальнага за кожны крок і крытэрыя завершэння пры зміне коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выконваецца, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Неабяжна выкорыстоўваць інструменты з часткавымі схемамі і чысткімі пазначэннямі побачных наследкаў. Хосты должны ведаць, якія вызовы мутуюць стан, перш чым автаматычна схваліць іх. Для стварэння кантролю над архітэктурай неабяжна ўзначыць вхідныя даны, адпаведальнага за кожны крок і крытэрыя завершэння пры зміне коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць час выканання і вартасць токенаў або запытак разам з функцыйнальнымі рэзултатамі. Відразувыя даны пра вартасці запобегаюць неспакойным рахункам, калі працэс пераходзіць з дэмовай асяроддзя ў спакульнаныя сераўеры.
1. Кліент MCP
Для кліента MCP неабяжна прадзеўкаванне параметраў вводу, адпаведнага власніка крока і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі павінны магчымаць перзапуск крока з вядомай точкі контролю, не прабуючы выявіць схованы стан. Конфігурацыю трэба захаваць праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функцый павінны знаходзіцца ў адном месцы, якое аперацыйныя працавнікі могу пераглядаць, не чытаючы весь ланцуг аплікацыі. Аўтэнтыфікацыя павінна выконвацца на воратах, а пераправержэння прав — на роўні дадзеных. Толькі токэн-носіцель не ёсць межай аплікацыйнага тэнанта.
2. Проксі Lambda MCP («мозг» OAuth)
Для пункта 2. Проксі Lambda MCP («галава» OAuth) — неабяжна задаць вхідныя даны, адміністратара крока і крытэрыя завершэння пры зміне коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе перакрыцця і апрацоўка некорэктных паведамленняў ёсць часткай продукту, а не яго пазнейшай дапрацоўкі. Автэнтыфікацыя выканаць у шлюзе, а прабачэнне прав на выкарыстоўвання — у роўні дадзеных. Толькі токэн-носіцель не ёсць межай арэндаванага рэсурсу.
3. AWS Bedrock AgentCore Gateway
Для пункта 3. AWS Bedrock AgentCore Gateway неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння пры зміне коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю без неабяжнага вычыслення схованых станоў. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына неабяжна паказваць адпаведальную частку, а не заплутаны цэлы працэс. Автэнтыфікуйцеся на гэйтвейзе і паўторна автарызуйцеся на роўні дадзенняў. Толькі токэн-носіцель не ёсць межай арэндаванага рэсурсу. Для пункта 3. AWS Bedrock AgentCore Gateway неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння пры зміне коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю без неабяжнага вычыслення схованых станоў. Запішыце час выканання і кост токэна або запыту разам з функцыйнальнымі рэзультатамі. Відразлівае паказанне костаў з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэмовай асяроддзя ў спакульнаныя сераўсы.
4. AWS Bedrock AgentCore Runtime
Для пункта 4. AWS Bedrock AgentCore Runtime неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння пры зміне коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы схованы стан. Конфігурацыю трэба залічыць пазнаходзяцца за межамі коду прыкладнення. Файлы сераўнавальнага сяродовішча, хранілішчы секрэтных дадзеных і флагі функцый должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь ланцуг задач. Для кожнага вызову трэба ліставаць назву інструмента, хэш аргументаў, час затрымкі і рынак. Без такога журналу дэбаггірованне цыклаў агента губіць гадзіны.
Працэс аўтэнтыфікаціяй з канца ў канец
Для працэсу аўтэнтыфікацыяў з начала да канца неабходна перад змінай коду адзначыць параметры вхідных дадзеных, адпаведальнага за кожны крок і крытэрыя завершэння. Аператары должны магчымае запускаць крок з вядомай точкі контролю, не прабуючы спадарацца прыватны стан. Неабходна адзначыць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, перакрыцча з боку чалавека і апрацоўка непрацэспрытных паведамленняў ёсць часткай продукту, а не дадатковым элементам пасля яго стварэння. Для кожнага вызову трэба фіксаваць назву інструмента, хэш параметраў, час адклікання і рынак. Без такых задапісаў дэбаггаванне агента займае гадзіны.
┌─────────────────────┐
│ MCP Client │
│ Claude / Claude Code│
└──────────┬──────────┘
│
│ OAuth 2.1 + PKCE
▼
┌─────────────────────┐
│ Lambda MCP Proxy │◄──────────────► Okta
│ OAuth / Identity │ Login + JWT
└──────────┬──────────┘
│
│ Bearer JWT
▼
┌─────────────────────────────┐
│ Bedrock AgentCore Gateway │
│ CUSTOM_JWT validation │
└────────────┬────────────────┘
│ SigV4
▼
┌─────────────────────────────┐
│ Bedrock AgentCore Runtime │
│ FastMCP Server │
│ │
│ list_catalogs │
│ describe_table │
│ execute_query │
└────────────┬────────────────┘
│
│ User JWT
▼
┌─────────────────────────────┐
│ Enterprise Query Engine │
│ Per-user authorization │
└─────────────────────────────┘
Глыбокая аналіз 1: Навучэнне проксі Lambda выкарыстоўваць OAuth 2.1
Для глыбокага анаізу 1: Кантролюванне проксі Lambda для выкарыстання стандарта OAuth 2.1 — пярэд тым, як зменіць код, неабходна дэфініцыя вхідных даных, адпаведнага адпаведальнага за крок і крэтарыў выходу. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю без неабясненняя схованага стану. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшаў, прычына нехасабносты павінна вказываць на адзін конкрэтны элемент, а не на заплутаны ланцужок задач. Зявляйце інфармацыю пра назву інструмента, хэш аргументаў, час адпаведзення і рэзультат кожнага вызову. Без такога лёгкага адстэйплення дыбаггін цілых ланцужка задач займае гадзіны. Для глыбокага анаізу 1: Кантролюванне проксі Lambda для выкарыстання стандарта OAuth 2.1 — пярэд тым, як зменіць код, неабходна дэфініцыя вхідных даных, адпаведнага адпаведальнага за крок і крэтарыў выходу. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю без неабясненняя схованага стану. Запісвайце час выканання, а таксама кост токенаў чы іншых запытаў разам з функцыйнальнымі рэзультатамі. Відразувыя даны пра косцы запобегают неспакойным рахункам, калі працэс выканання не прыме планаванага направлення.
Пераходзіць з дамовайго рэжыму ў спяльныя сэрвісы.# GET /.well-known/protected-resource
{
"resource": f"{BASE_URL}/mcp",
"authorization_servers": [BASE_URL],
}
# GET /.well-known/oauth-authorization-server
{
"issuer": BASE_URL,
"authorization_endpoint": f"{BASE_URL}/authorize",
"token_endpoint": f"{BASE_URL}/token",
"registration_endpoint": f"{BASE_URL}/register",
"response_types_supported": ["code"],
"grant_types_supported": ["authorization_code", "refresh_token"],
"code_challenge_methods_supported": ["S256"],
"token_endpoint_auth_methods_supported": ["none"],
}
Перадача PKCE без яе наражэння
Для перадачы PKCE без яе наражэння неабходна пазначыць параметры, адпаведальнага за крок і крытэрыі завершэння пры перадзеўленні коду. Аператары должны магчымае перайсці на гэты крок з вядомага пункта контролю, не спрабоўваючы здогадвацца пра схованы стан. Конфігурацыю трэба залічыць пазнаходзяцца за межамі коду прыкладнення. Файлы сэрвіса, хранальнікі секрэтных дадзеных і пазначкі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь ланцуг аперацый. Неабходна выклікваць інструменты з вузкімі схемамі і чысткімі пазначкамі побачных эфектаў. Хосты должны ведаць, якія вызовы мутуюць стан, прычым автаматычна не падтрымліваць іх.
relay_payload = json.dumps({"u": original_redirect, "s": original_state}).encode()
relay_state = base64.urlsafe_b64encode(relay_payload).decode().rstrip("=")
params = {
"client_id": OKTA_CLIENT_ID,
"response_type": "code",
"redirect_uri": f"{BASE_URL}/callback", # <- proxy's callback
"state": relay_state, # <- client's state, wrapped
"code_challenge": qs["code_challenge"], # <- untouched
"code_challenge_method": "S256",
}
Дынамічная рэгістрацыя кліента
Для дынамічной рэгістрацыі кліента неабходна пазначка вхідных дадзеных, адпаведнага власніка крока і крэтарыяў завершэння працы перад змінайом коду. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабходна адначасовая документацыя як стандартнага, так і альтэрнатывнага падходу. Практыка перапрыбуткі, людзкія перакрыцця і апрацоўка некорэктных паведамленняў ёсць часткай продукту, а не етапам пазнейшай доработкі. Неабходна наяўнасць інструментаў з вузкімі схемамі і чысткімі пазначкамі парадуктывных эфектаў. Хосты должны ведаць, якія вызовы мутуюць стан, перш чым автаматычна ўзрабатваць запіт.
def handle_register(event):
req = json.loads(event.get("body") or "{}")
return _json_resp(201, {
"client_id": OKTA_CLIENT_ID,
"redirect_uris": req.get("redirect_uris", []),
"grant_types": req.get("grant_types", ["authorization_code"]),
"response_types": req.get("response_types", ["code"]),
"token_endpoint_auth_method": "none",
})
Глыбокі аналіз 2: Проблемы, якія з’яўляюцься, калі FastMCP належыць да AgentCore
Для глыбокага анаізу 2: Застаўленыя бракі, калі FastMCP знаходзіўся пасля AgentCore; пры змяне коду неабходна запрацаваць вхідныя даны, абярнучага за крок і крэтырыя завершэння. Аператары должны магчымае перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптаў. Калі крок не выйшоў, прычына браку должна вказываць на адну конкрэтную абяранасць, а не на заплутаны працэс. Адкрываць інструменты з вузкімі схемамі і чыткімі пазначэннямі парадуктаў. Хостам неабходна ведаць, якія вызовы мутуюць стан, перш чым яны автаматычна затвердзяюць ўпраўленні. Для глыбокага анаізу 2: Застаўленыя бракі, калі FastMCP знаходзіўся пасля AgentCore; пры змяне коду неабходна запрацаваць вхідныя даны, абярнучага за крок і крэтырыя завершэння. Аператары должны магчымае перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісваць час выканання і кост токенаў або запытаў разам з функцыйнаімі рэзультатамі. Відкрытыя даны пра косцы дапамагаюць запобегчы бракам з самага пачатку.
Можаюць выйсці неспакоўлівыя рахункі, калі маршрут пераходзіць з рэжыму дэмаверсіі ў спяльныя сераўысы.
Агравуючы факт №1: Ніякія спецыяльныя заголовкі HTTP не доходзяць да кантэйнера
Шчодзе агравуючага факту №1: Ніякія спецыяльныя заголовкі HTTP не доходзяць да кантэйнера, перад зменай коду неабходна задаць вхідныя даны, абавесця крока і крытэрыі завершэння. Аператары должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба залічыць паза кодам прыемніка. Файлы сераўысу, хранільнікі секрэтных даных і флагі функцый належыць у аднам месца, якое аператары можаць пераглядаць, не чытаяўшы весь лянцуг задач. Автэнтыфікуйцеся на шлюзе і практыкуйце пераверыць правыя на роўні дадзенняў. Сам токен-носільцы не ёсць межай арэндаванага рэсурсу.
meta = payload.setdefault("params", {}).setdefault("_meta", {})
meta["okta_token"] = token # the validated user identity
meta["trino_target"] = routing_hint # optional routing metadata
class CredentialExtractMiddleware:
async def __call__(self, scope, receive, send):
# buffer the whole body
body = await _read_full_body(receive)
# pull identity out of params._meta
meta = json.loads(body).get("params", {}).get("_meta", {})
token = meta.get("okta_token") # AgentCore also injects the validated caller token as a header —
# prefer that when present, fall back to _meta / Authorization otherwise
token = token or _caller_token_from_headers(scope) _req_okta_token.set(token) # replay the buffered body so the MCP app can read it too
await self.app(scope, _replay(body, receive), send)
Агравуючы факт №2: AgentCore адключае заголовок Accept
Для „Sharp edge“ #2: AgentCore адыятуе заголовак Accept, задае параметры вводу, адміністратара крока і крытэрыя завершэння пры змены коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы схованы стан.
Неабяжна задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкія контралі і обработка некорэктных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам.
Автэнтыфікацыя выкананае ў шлюзе, а прабачэнне правоў — у роўні дадзеных. Толькі токэн-носіцель не ёсць межай арэндаванага рэсурсу.
class InjectAcceptMiddleware:
async def __call__(self, scope, receive, send):
if scope["type"] == "http":
headers = [(k, v) for k, v in scope["headers"] if k != b"accept"]
headers.append((b"accept", b"application/json, text/event-stream"))
scope = {**scope, "headers": headers}
await self.app(scope, receive, send)
Глыбокі аналіз 3: Спаўненне токэнаў доступу Okta з ізольаванымі сесіямі Trino
Для глыбокага анаізу 3: Спраўленне канектавання токэнаў доступу Okta да ізаліяваных сесыяў Trino, перад зменым коду неабходна задаць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аперацыёныя працавнікі должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптаў. Калі крок не выйшоў, прычына нехарактэрнага рэзультата должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны працэс. Автэнтыфікуйцеся на воратах і паўторна автарызуйцеся на роўні дадзенняў. Толькі токэн-носіцель не ёсць межай адпаведальнасці. Для глыбокага анаізу 3: Спраўленне канектавання токэнаў доступу Okta да ізаліяваных сесыяў Trino, перад зменым коду неабходна задаць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аперацыёныя працавнікі должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісвайце час выканання і кост токэнаў або запытаў разам з функцыйнымі рэзультатамі. Відразувая візуабілізацыя костаў запобегае неспакойным рахункам.
Калі шлях пераходзіць з рэжыму дэмо ў спяльныя сераўысі.
def get_connection():
token = _req_okta_token.get()
user = _jwt_email(token) # e.g. "alice@company.com"
return backend.connect(
host=BACKEND_HOST,
user=user, # identity for attribution/authorization
auth=JWTAuthentication(token), # the backend re-validates this itself
http_scheme="https",
)
Автарызацыя і застосаванне рэжыму толькі чытання ў канечнай меры належаць да слоя дадзэнаў.
Для таго, каб автарызацыя і застосаванне рэжыму толькі чытання ў канечнай меры належалі да слоя дадзэнаў, неабходна прадзефінаваць вхідныя даны, власніка крока і крытэрыя завершэння пры зміне коду. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба залічыць параду ад коду прыкладнення. Файлы сераўыса, хранільнікі секрэтных даных і флагі функцый належаць у аднам месца, якое аператары можаць пераглядаць, не чытаючы весь граф. Фіксаваць назву інструмента, хэш аргументаў, час адклікання і рэзультат кожнага вызову. Без такога лёгкага следу дэбагаванне агента займае гадзіны.
forbidden = ("INSERT", "UPDATE", "DELETE", "DROP", "CREATE",
"ALTER", "TRUNCATE", "MERGE", "REPLACE", "GRANT", "REVOKE")
if any(query.strip().upper().startswith(kw) for kw in forbidden):
raise ValueError("Write operations are not allowed.")
Два спосабы падключэння кліента
Для двух спосабоў падключэння кліента неабходна перад змянай коду візначыць параметры вхідных дадзеных, адпаведальнага за крок і крытэрыя завершэння. Аператары должны магчымае перазапускаты крок з вядомай точкі контролю, не прабуючы здогадвацца пра схованы стан. Неабходна адразу задокументаваць шлях успеху і шлях вярнення. Перапрыбуткі, людзкі контроль і обработка некорэктных паведамленняў ёсць часткай продукту, а не етапамі далейшай наладкі. Для кожнага вызову трэба фіксаваць назву інструмента, хэш параметраў, час адклікання і рынак. Без такога лёгкага следу дэбагаванне агента, які цягнёцца без канца, вядзе да втраты гадоў часу.
{ "mcpServers": { "data": { "type": "http", "url": "https://<lambda-url>/mcp" } } }
{ "mcpServers": { "data": { "type": "http", "url": "http://localhost:8766/mcp" } } }
Што мы выявілі
Згідна з тым, што мы выявілі, перш чым зменіць код, неабяжна візначыць вхідныя даны, адміністратара крока і крытэрыя завершэння. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выконваецца, прычына нехарактэрнага рэзультата павінна вказываць на адну конкрэтную прычыну, а не на заплутаную сітку крокаў. Для кожнага вызову неабяжна фіксаваць назву інструмента, хэш аргументаў, час адпаведзі і рэзультат. Без такога журналу дэбаггін займае гадзіны. Згідна з тым, што мы выявілі, перш чым зменіць код, неабяжна візначыць вхідныя даны, адміністратара крока і крытэрыя завершэння. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Паралельна з функцыйнымі рэзультатамі неабяжна фіксаваць час выканання і вартасць токенаў або запытам. Візуальная даступнасць вартасцей запобегае неспакою, калі працэс пераходзіць з дэмовай асяроддзя ў спакульную.
Заключэнне
Для завершэння, перад змянайом код неабходна ясная ваказка пра вхідныя даны, адміністратара крока і крэтэрыяў завершэння. Аператары должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы пра схованы стан.
Чэк-ліст для эксплуатацыі
Для чэк-ліста для эксплуатацыі, перад змянайом код неабходна ясная ваказка пра вхідныя даны, адміністратара крока і крэтэрыяў завершэння. Аператары должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы пра схованы стан.
Спрытваце гэты ўрадок як кантракт між вхіднымі дадзеннямі і паўнастацэннымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаце крытэрыя успеху і не прымайце часткова завершаныя рэзультаты без паведамлення.
Аўтэнтыфікуйцеся на входзе і паўтарна автарызавайцеся на роўні дадзенняў. Толькі токэн-носіцель не ёсць межай адпаведнага тэнанту.
Стварайце контрольныя пункты пасля дорогіх крокаў. Сістэма вярнення працы не павінна занова ставіць плату за той самы вызыв LLM, калі аператар прабуе зноў запрацаваць пазнейшы вузел.
Перадавайце ідэнтыфікаторы кліента да сховішча дадзенняў без таго, каб усіх прырównваць да аднаго сэрвіснага аканту.
Калі бюджэт дазволяе, дадзіце тэст на перакананне, які працуе з крытычным маршрутом у сістэме CI за дапамогою фіксатываў, а не з рэальнымі платнымі API.
Перш чым запускаць абнаўленні, заморозьце версіі, зафіксавце ідэальны варыянт дадзеных для крытычнага шляху і паказваце спосабы вярнення да пачатковага стану. У спільных срэдах неабяжна наявнасць лімітавання частоты запытак, перагляду прав на вікорыстоўванне рэсурсаў і чысткага власніка для змены секрэтных даных. Лепш выбіраць простую надзеянасць на стабільнасць, чым крэатывныя, але еднакратныя дамы.
Прымечанне па развёртванні 1: закрэпіце зображэнні, задаце ліміты на колькасць запытак і пераканацеся ў ізоляціі корыстувачаў на прыкладнай асяроддзі перш чым распрастраńваць абнаўленні ў шырокім масштабе.
Прымечанне па развёртванні 2: закрэпіце зображэнні, задаце ліміты на колькасць запытак і пераканацеся ў ізоляціі корыстувачаў на прыкладнай асяроддзі перш чым распрастраńваць абнаўленні ў шырокім масштабе.
Прымечанне па развёртванні 3: закрэпіце зображэнні, задаце ліміты на колькасць запытак і пераканацеся ў ізоляціі корыстувачаў на прыкладнай асяроддзі перш чым распрастраńваць абнаўленні ў шырокім масштабе.
Прымечанне па развёртванні 4: закрэпіце зображэнні, задаце ліміты на колькасць запытак і пераканацеся ў ізоляціі корыстувачаў на прыкладнай асяроддзі перш чым распрастраńваць абнаўленні ў шырокім масштабе.
Прымечанне па развёртванні 5: закрэпіце зображэнні, задаце ліміты на колькасць запытак і пераканацеся ў ізоляціі корыстувачаў на прыкладнай асяроддзі перш чым распрастраńваць абнаўленні ў шырокім масштабе.
Запіс працэўвання 6: фіксаванне зображэнняў, задача бюджэтаў запытоў і перакананне ў ізоляцыі корыстнікаў на прыкладным экземплярэ прычынам больш шырокага распраўлення.