아우라베이스 로고
아우라베이스문서
문서›Edge Functions›Test and deploy from CI

CI에서 테스트 및 배포

로컬 에뮬레이션의 한계가 미리 명시된 첫 번째 편집부터 자동 배포까지 실행 가능한 루프입니다.

8분 읽기·레벨 중급·2026. 10. 12.에 개정됨
이 영어 텍스트는 프랑스어 원본에서 자동으로 생성되었으며 아직 검토되지 않았습니다.
이 페이지는 자동으로 번역되었습니다. 영어 버전은 권위가 있습니다.
#
지역

1. 로컬에서 실행

aura functions serve는 Deno을 사용하여 파일을 실행하고 저장할 때 다시 시작합니다.

terminalbash
aura functions serve hello --port 54321
curl -X POST http://127.0.0.1:54321/ -H 'Content-Type: application/json' -d '{"name":"Ada"}'

이는 일반 Deno 서버입니다. 플랫폼과 비교하면 다음과 같습니다.

  • 플랫폼 헤더가 없습니다. x-aura-role 및 x-aura-user-id이 없습니다. 인증 분기를 테스트하려면 curl -H를 사용하여 직접 보내세요.
  • 비밀이 없습니다. 셸에 STRIPE_SECRET_KEY=sk_test_… aura functions serve checkout를 전달합니다.
  • 제한이 없습니다. 메모리, 타임아웃, 바디 크기, 속도 제한은 적용되지 않습니다.
  • 일반 요청. 함수를 직접 호출하므로 path 및 method는 SDK의 invoke 옵션이 아니라 curl의 함수입니다.

invoke가 플랫폼 경로를 호출하기 때문에 SDK는 이 서버를 대상으로 지정할 수 없습니다. 아래와 같이 실제 프로젝트에 대해 SDK 경로를 테스트합니다.

#
통합

2. 실제로 테스트해 보세요

개발용 프로젝트를 생성하고(첫 번째 함수참조) 거기에 함수를 배포하고 SDK를 통해 테스트합니다. 여기에는 플랫폼의 ID 헤더, 제한 및 오류 클래스가 포함됩니다.

tests/hello.test.tstypescript
import { createClient, FunctionsHttpError } from '@aurabase/aurabase-js'
import { describe, expect, it } from 'vitest'

const aura = createClient(process.env.AURA_TEST_URL!, process.env.AURA_TEST_ANON_KEY!)

describe('hello', () => {
  it('greets', async () => {
    const { data, error } = await aura.functions.invoke<{ greeting: string }>('hello', { body: { name: 'Ada' } })
    expect(error).toBeNull()
    expect(data?.greeting).toBe('Hello, Ada!')
  })

  it('reports a missing function as a FunctionsHttpError 404', async () => {
    const { error } = await aura.functions.invoke('does-not-exist')
    expect(error).toBeInstanceOf(FunctionsHttpError)
    expect(error?.status).toBe(404)
  })

  it('refuses to list functions with a public key', async () => {
    const { data, error } = await aura.functions.list()
    expect(data).toBeNull()
    expect(error?.status).toBe(403)
  })
})

팁:

  • 프로덕션이 아닌 전용 프로젝트를 사용하고 해당 키를 CI 비밀에 보관하세요.
  • 호출 속도 제한은 15개 호출과 IP당 초당 1개입니다. 테스트 간격을 두거나 순차적으로 실행하세요.
#
CI

3. CI에서 배포

aura CLI는 macOS Apple Silicon의 npm 및 다른 소스에서 설치되므로 HTTP API를 사용하면 Linux CI 작업이 더 간단해집니다. 배포는 service_role 키로 인증된 함수당 하나의 POST입니다. 이 정확한 루프는 실제 프로젝트에 대해 실행되었으며 나중에 함수가 응답했습니다.

.github/workflows/deploy-functions.ymlyaml
name: Deploy functions
on:
  push:
    branches: [main]
    paths: ['aurabase/functions/**']

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Deploy every function
        env:
          AURA_PROJECT_URL: ${{ secrets.AURA_PROJECT_URL }}
          AURA_SERVICE_ROLE_KEY: ${{ secrets.AURA_SERVICE_ROLE_KEY }}
        run: |
          set -euo pipefail
          for dir in aurabase/functions/*/; do
            name=$(basename "$dir")
            file="${dir}index.ts"
            [ -f "$file" ] || continue
            jq -n --arg name "$name" --rawfile code "$file" \
              '{name: $name, runtime: "deno", code: $code}' |
            curl -sS --fail-with-body -X POST "$AURA_PROJECT_URL/v1/functions" \
              -H "apikey: $AURA_SERVICE_ROLE_KEY" \
              -H "Content-Type: application/json" \
              --data-binary @-
            echo " deployed $name"
          done

푸시할 때마다 이를 안전하게 실행하는 데 도움이 되는 사실은 다음과 같습니다.

  • POST는 본문에 env_vars이 없기 때문에 기존 함수의 코드를 대체하고 비밀을 유지합니다.
  • 함수는 단일 파일입니다. 상대 가져오기는 제공되지 않습니다. 로컬 모듈을 사용하는 경우 먼저 번들링하세요.
  • 서버에는 버전 기록이 없습니다. Git 기록은 롤백입니다. 돌아가려면 커밋을 되돌리고 CI를 다시 배포하도록 하세요.

그런 다음 다음 작업에서 방금 배포한 프로젝트에 대해 통합 테스트를 실행하세요.

#
환경

4. 개발, 준비 및 생산

하나의 프로젝트는 하나의 환경입니다. 각 환경마다 고유한 URL과 키가 있는 하나의 프로젝트를 만들고 CI가 대상을 선택하도록 합니다.

환경프로젝트배포 시기
개발개발자당 하나 또는 공유요청 시 지점에서
스테이징my-app-stagingmain에 푸시할 때마다
생산my-app릴리스 태그(스테이징 테스트 통과 후)

GitHub 환경별로 AURA_PROJECT_URL 및 AURA_SERVICE_ROLE_KEY을 저장하고 각 프로젝트에서 각 함수의 비밀을 별도로 설정합니다. 프로젝트 간에는 아무것도 공유되지 않습니다.

마지막 업데이트 · 2026. 10. 12.