SDK 0.6 및 새로운 함수 규칙으로 업그레이드
순환해야 할 수 있는 비밀이 포함된 JavaScript SDK에서 Edge Functions를 호출하는 프로젝트에 대한 체크리스트입니다.
1. 달라진 점
새 버전을 설치합니다.
이 릴리스에는 하나의 보안 변경 사항과 오류 및 응답 보고 방법에 대한 여러 가지 수정 사항이 포함되어 있습니다. 보안 변경 사항은 함수 서비스에도 적용됩니다. 사용하는 SDK 버전에 관계없이 서비스가 업데이트되는 즉시 프로젝트에 적용됩니다.
2. 주요 변경 사항
이제 관리 호출에는 service_role 키가 필요합니다.
functions.list(), get(), listJobs(), getJob(), enqueueJob(), listCronJobs(), createCronJob() 및 deleteCronJob()는 공개 키 또는 로그인한 사용자에게 403를 반환합니다. 이전에는 list() 및 get()가 공개 키를 보유한 모든 사람에게 모든 함수의 소스 코드와 변수를 반환했습니다. 보안 모델을 참조하세요.
프런트 엔드에 필요한 것(예: 이름)만 반환하고 전체 정의는 반환하지 마세요.
JSON이 될 수 없는 본문은 거부됩니다.
invoke(name, { body: new Blob(…) })및 ArrayBuffer, 형식화된 배열, FormData, URLSearchParams 또는 ReadableStream와 동일하게 이제 오류 코드 invalid_body를 반환합니다. 이전에는 함수가 {}을 수신했지만 오류가 보고되지 않았습니다. 바이너리 데이터(base64)를 인코딩하거나 스토리지에 업로드하고 해당 경로를 보냅니다.
함수 자체의 502, 503 또는 504는 FunctionsHttpError입니다.
이전에는 이러한 상태가 코드에서 반환된 경우에도 항상 FunctionsRelayError로 분류되었습니다. 이제 FunctionsRelayError는 플랫폼이 실패했음을 의미합니다. FunctionsRelayError에서 재시도한 경우 재시도 논리가 여전히 일치하는지 확인하세요. 오류, 시간 초과 및 재시도를 참조하세요.
FunctionDef이 더 정확합니다.
env_vars는 Record<string, string>( Record<string, unknown>)이며 permissions이 추가됩니다. 이러한 필드를 읽는 코드는 계속 작동합니다. 다른 유형의 값을 할당한 코드는 더 이상 컴파일되지 않습니다.
3. 동작 수정
| 이전 | 지금 |
|---|---|
텍스트와 함께 500를 반환하는 함수가 "null" 메시지를 생성했습니다. | 메시지는 함수가 반환한 텍스트입니다. |
{ data: null, error: null } 생성된 텍스트와 함께 200를 반환하는 함수 | data는 텍스트입니다. |
기본 모드의 이진 응답으로 { data: null, error: null }이 생성되었습니다. | error.code은(는) invalid_response이고 메시지에서는 responseType을(를) 제안합니다. |
responseType: 'text' 오류 JSON { "error": "…" }에 HTTP 503 표시됨 | 기본 모드에서와 같이 JSON에서 메시지를 읽습니다. |
'text', 'blob' 및 'arrayBuffer'에는 기본 시간 초과가 없습니다. | 클라이언트 시간 초과(30초)가 적용됩니다. |
| 인코딩되지 않은 URL에 함수 이름이 삽입되었습니다. | 인코딩되었습니다: a/../b는 해당 경로 내에 유지됩니다. |
작업의 delaySecs이 무시되었습니다. 작업이 한 번에 실행되었습니다. | 작업이 해당 날짜를 기다립니다. |
새로운 내보내기: FunctionsHttpError, FunctionsRelayError, isRelayStatus 및 FunctionsResponseType는 @aurabase/aurabase-js 및 @aurabase/functions에서 제공됩니다. @aurabase/functions에서 가져온 경우 계속 작동합니다. pnpm을 사용하면 더 이상 해당 패키지가 직접 종속성으로 필요하지 않습니다.
@aurabase/auth에서 getClaims() 결과의 email 유형은 이제 string | null이며, 이는 이메일 주소가 없는 사용자에 대해 서비스가 반환하는 것입니다.
CLI. aura functions deploy는 더 이상 이미 존재하는 기능의 비밀을 지우지 않습니다. aura functions invoke --data는 {}을 보내는 대신 잘못된 JSON을 거부합니다. aura functions download는 Deno 함수에 대해 작동합니다. aura functions serve는 자신이 알리는 포트를 수신합니다. aura studio는 포트 3000에서 Studio를 엽니다.
4. 노출된 비밀을 교체하세요
프로젝트가 이 변경 이전의 서비스 버전에서 실행된 경우 공개 키 보유자는 누구나 함수의 코드와 변수를 읽을 수 있습니다. 읽었다고 가정합니다.
service_role키를 사용하여 함수를 나열하고 각 변수를 엽니다.- 결제 키, 웹훅 비밀, 제3자 토큰 등 포함된 모든 비밀을 교체하세요.
index.ts에 직접 작성된 비밀을 제거하고 변수로 이동합니다.- 생성하지 않은 항목에 대해서는 프로젝트의 작업 및 경고 규칙을 확인하세요.
5. 체크리스트
- 브라우저에서 실행되는 코드 또는 공개 키를 사용하여
functions.list(,functions.get(,listJobs(,getJob(,enqueueJob(,createCronJob(,deleteCronJob(및listCronJobs(에 대한 코드를 검색하세요. - 일반 JSON이 아닌
body:값을 검색합니다. FunctionsRelayError에 의존하는 재시도 논리를 확인하세요.- 위에서 설명한 대로 비밀을 순환합니다.
- CLI를 업데이트합니다.