Modal
연결
터미널에서 Modal을 연결하세요. Modal이 받는 플래그는 --help로 확인할 수 있고, 헤드리스 환경에서는 --no-browser를 함께 사용하세요.
polylane cloud connect --provider modalModal 설정의 토큰 ID와 토큰 시크릿입니다.
Modal은 Modal 설정에서 만든 토큰으로 연결합니다. Modal 토큰은 정확히 하나의 워크스페이스에 해당하므로, 토큰 하나가 워크스페이스 하나를 연결합니다. 토큰은 저장 전에 암호화되며 에이전트는 이를 절대 보지 못합니다.
- Modal을 열고 Settings → Tokens로 이동합니다.
- New token을 클릭하고 token ID(
ak-로 시작)와 token secret(as-로 시작)을 모두 복사합니다. - 두 값을 Polylane에 붙여 넣습니다.
- Polylane이 쌍을 검증하고 동기화를 시작합니다.
Polylane은 환경을 발견하고, 각 환경 안에서 앱, 웹 엔드포인트를 포함한 함수, 실행 중인 샌드박스, 볼륨, 시크릿, 큐, dict를 발견합니다. 시크릿은 이름으로만 매핑됩니다: Modal은 시크릿 값을 절대 노출하지 않습니다.
Modal에는 읽기 전용 토큰 옵션이 없으므로, 토큰은 이를 만든 계정의 권한을 갖습니다. Polylane은 동기화 중 Modal에서 읽기만 합니다.
문제 해결
"Invalid token" 오류
- 토큰 ID와 토큰 시크릿이 모두 필요합니다. 어느 하나만으로는 인증할 수 없습니다.
- Modal 설정에서 토큰이 취소되지 않았는지 확인하세요.
ak-와as-접두사를 포함해 전체 값을 복사했는지 확인하세요.
리소스 누락
- 함수는 앱을 통해 발견되므로, 배포된 적이 없는 앱에는 표시할 함수가 없습니다.
- 종료된 샌드박스는 건너뜁니다: 실행 중인 것만 나타납니다.
- 다음 예약된 동기화보다 빨리 새로 고치려면 수동 동기화를 실행하세요.
메트릭과 비용
- 앱에는 두 개의 차트가 있습니다: 버킷당 stderr 로그 줄 수와 시간당 측정 지출입니다. Modal은 나머지 모든 것에 대해 순간 게이지만 보고하므로, 함수, 샌드박스, 볼륨에는 자체 차트가 없습니다.
- stderr 개수는 실패가 아니라 로그 줄 수입니다: Python 트레이스백 하나가 여러 줄입니다.
- Modal은 로그를 24시간 보관하므로 차트는 그보다 더 과거로 가지 않습니다.
- 지출은 앱별로 귀속되며, Modal은 한 시간이 끝난 뒤에야 확정하므로, 가장 최근 시간은 정리되기 전까지 낮게 표시됩니다.
CI 작업이나 브라우저가 없는 다른 환경에서 Modal을 연결하세요.
Modal 연결에는 브라우저가 필요하지 않습니다: 콘솔이 호출하는 것과 같은 엔드포인트를 CI 작업에 담을 수 있습니다. 인증된 POST 하나가 연결을 만들고 첫 동기화를 시작합니다.
사전 요구 사항
cloud_accounts:write와cloud_accounts:read스코프를 가진 Polylane API 키. API 키와 OAuth를 참고하세요.ws_로 시작하는 워크스페이스 ID. 같은 키로GET /v1/workspaces에서 읽을 수 있습니다.- Settings → Tokens의 Modal 토큰 쌍: 토큰 ID(
ak-로 시작)와 토큰 시크릿(as-로 시작).
연결 만들기
curl -X POST https://api.polylane.com/v1/cloud_accounts \
-H "x-api-key: $POLYLANE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"provider": "modal",
"workspaceId": "ws_0abc123",
"tokenId": "ak-...",
"tokenSecret": "as-..."
}'
토큰은 정확히 하나의 Modal 워크스페이스에 해당하므로, 한 번의 호출로 워크스페이스 하나가 연결됩니다.
응답은 연결된 것을 나열하며, 첫 동기화는 이미 실행 중입니다. 나머지 흐름이 읽는 두 필드만 남기면:
{
"success": true,
"result": {
"provider": "modal",
"accounts": [{ "id": "acc_34gky74ibc92h8t2efn8csrh", "status": "syncing" }],
"failures": []
}
}
이미 연결된 계정은 accounts 대신 failures에 들어가므로, 호출을 반복해도 연결이 중복되지 않습니다.
첫 동기화 기다리기
반환된 각 계정을 id로 status가 ready에 도달할 때까지 폴링하세요(등록 시 new, 리소스가 들어오는 동안 syncing):
until [ "$(curl -s "https://api.polylane.com/v1/cloud_accounts/$WORKSPACE_ID/$ACCOUNT_ID" \
-H "x-api-key: $POLYLANE_API_KEY" | jq -r '.result.status')" = "ready" ]; do
sleep 15
done
실패한 연결이 작업을 멈추게 하는 대신 실패시키도록 루프에 기한을 두세요. 계정이 ready가 되면 리소스는 토폴로지에 있고 Polylane은 첫 검사를 시작한 상태입니다.
API에서 연결 해제
연결을 삭제하면 모든 동기화와 검사가 중단되고 Polylane이 보관하던 자격 증명이 삭제됩니다. 호출에는 cloud_accounts:delete 스코프가 필요합니다:
curl -X DELETE "https://api.polylane.com/v1/cloud_accounts/$WORKSPACE_ID/$ACCOUNT_ID" \
-H "x-api-key: $POLYLANE_API_KEY"
그 다음 아래 연결 해제에 설명된 대로 제공자 쪽에서 Modal 자격 증명을 취소하세요.
연결 해제
연결을 해제하면 모든 동기화와 검사가 중단되고 Polylane이 보관하던 자격 증명이 삭제됩니다. Polylane이 Modal에 설정한 모든 것도 함께 제거되며, 남는 것은 없습니다.
polylane cloud disconnect <id>도구
5에이전트가 스레드에서 수행할 수 있는 작업입니다.
지원 리소스
10인프라 그래프에 표시되는 리소스 유형입니다.