환경 변수와 같은 고급 구성이나 동시 실행, CPU, 메모리 제한과 같은 런타임 설정의 경우 앱의 루트 디렉터리에서 apphosting.yaml
파일을 만들고 수정해야 합니다. 이 파일은 Cloud Secret Manager로 관리되는 보안 비밀에 대한 참조도 지원하므로 소스 제어에 안전하게 체크인할 수 있습니다.
백엔드의 Cloud Run 서비스 설정, 일부 환경 변수, Cloud Secret Manager에서 관리하는 보안 비밀에 대한 참조가 포함된 일반적인 apphosting.yaml
파일은 다음과 같습니다.
# Settings for Cloud Run
runConfig:
minInstances: 2
maxInstances: 100
concurrency: 100
cpu: 2
memoryMiB: 1024
# Environment variables and secrets
env:
- variable: STORAGE_BUCKET
value: mybucket.appspot.com
availability:
- BUILD
- RUNTIME
- variable: API_KEY
secret: myApiKeySecret
# Same as API_KEY above but with a pinned version.
- variable: PINNED_API_KEY
secret: myApiKeySecret@5
# Same as API_KEY above but with the long form secret reference as defined by Cloud Secret Manager.
- variable: VERBOSE_API_KEY
secret: projects/test-project/secrets/secretID
# Same as API_KEY above but with the long form secret reference with pinned version.
- variable: PINNED_VERBOSE_API_KEY
secret: projects/test-project/secrets/secretID/versions/5
이 가이드의 나머지 부분에서는 이러한 설정 예에 대한 자세한 정보와 컨텍스트를 제공합니다.
Cloud Run 서비스 설정 구성
apphosting.yaml
설정을 사용하면 Cloud Run 서비스가 프로비저닝되는 방식을 구성할 수 있습니다. Cloud Run 서비스에 사용할 수 있는 설정은 runConfig
객체에 제공됩니다.
cpu
– 각 제공 인스턴스에 사용되는 CPU 수입니다 (기본값 0).memoryMiB
– 각 제공 인스턴스에 할당된 메모리 양(MiB)(기본값: 512)maxInstances
– 한 번에 실행할 수 있는 최대 컨테이너 수입니다. 기본값은 100이며 할당량으로 관리됩니다.minInstances
– 항상 활성 상태로 유지할 컨테이너의 수입니다 (기본값 0).concurrency
– 각 제공 인스턴스가 수신할 수 있는 최대 요청 수입니다 (기본값: 80).
cpu
과 memoryMiB
의 중요한 관계에 유의하세요. 메모리는 128~32768 사이의 정수 값으로 설정할 수 있지만 메모리 한도를 늘리려면 CPU 한도를 늘려야 할 수 있습니다.
- 4GiB를 초과하면 2개 이상의 CPU 필요
- 8GiB를 초과하면 4개 이상의 CPU 필요
- 16GiB를 초과하면 6개 이상의 CPU 필요
- 24GiB를 초과하면 8개 이상의 CPU 필요
마찬가지로 cpu
의 값은 동시 실행 설정에 영향을 미칩니다. CPU를 1개 미만으로 설정하면 동시 실행을 1로 설정해야 합니다. CPU는 요청 처리 중에만 할당됩니다.
빌드 환경 구성
경우에 따라 빌드 프로세스에 서드 파티 API 키 또는 조정 가능한 설정과 같은 추가 구성이 필요할 수 있습니다. App Hosting은 apphosting.yaml
에서 프로젝트에 대해 이러한 유형의 데이터를 저장하고 검색할 수 있는 환경 구성을 제공합니다.
env:
- variable: STORAGE_BUCKET
value: mybucket.appspot.com
Next.js 앱의 경우 환경 변수가 포함된 dotenv 파일도 App Hosting에서 작동합니다. 모든 프레임워크에서 세분화된 환경 변수를 제어하려면 apphosting.yaml
를 사용하는 것이 좋습니다.
apphosting.yaml
에서 availability
속성을 사용하여 환경 변수에 액세스할 수 있는 프로세스를 지정할 수 있습니다. 환경 변수를 빌드 환경에서만 사용하거나 런타임 환경에서만 사용할 수 있도록 제한할 수 있습니다. 기본적으로 둘 다 사용할 수 있습니다.
env:
- variable: STORAGE_BUCKET
value: mybucket.appspot.com
availability:
- BUILD
- RUNTIME
Next.js 앱의 경우 dotenv 파일에서 사용하는 것과 동일한 방식으로 NEXT_PUBLIC_
프리픽스를 사용하여 브라우저에서 변수에 액세스할 수 있도록 할 수 있습니다.
env:
- variable: NEXT_PUBLIC_STORAGE_BUCKET
value: mybucket.appspot.com
availability:
- BUILD
- RUNTIME
유효한 변수 키는 A~Z 문자 또는 밑줄로 구성됩니다. 일부 환경 변수 키는 내부용으로 예약되어 있습니다. 구성 파일에서 다음 키를 사용하지 마세요.
X_FIREBASE_
로 시작하는 모든 변수PORT
K_SERVICE
K_REVISION
K_CONFIGURATION
보안 비밀 매개변수 저장 및 액세스
API 키와 같은 민감한 정보는 보안 비밀로 저장해야 합니다. apphosting.yaml
에서 보안 비밀을 참조하여 소스 제어에 민감한 정보를 체크인하지 않도록 할 수 있습니다.
secret
유형의 매개변수는 Cloud Secret Manager에 저장된 값이 있는 문자열 매개변수를 나타냅니다.
보안 비밀 매개변수는 값을 직접 파생하는 대신 Cloud Secret Manager에 있는지 확인하고 출시 중에 값을 로드합니다.
- variable: API_KEY
secret: myApiKeySecret
Cloud Secret Manager의 보안 비밀에는 여러 버전이 있을 수 있습니다. 기본적으로 라이브 백엔드에 사용할 수 있는 보안 비밀 매개변수의 값은 백엔드가 빌드된 시점에 사용 가능한 최신 버전의 보안 비밀에 고정됩니다. 매개변수의 버전 관리 및 수명 주기 관리 요구사항이 있는 경우 Cloud Secret Manager를 사용하여 특정 버전에 고정할 수 있습니다. 예를 들어 버전 5에 고정하려면 다음을 실행하세요.
- variable: PINNED_API_KEY
secret: myApiKeySecret@5
CLI 명령어 firebase apphosting:secrets:set
를 사용하여 보안 비밀을 만들 수 있으며, 필요한 권한을 추가하라는 메시지가 표시됩니다. 이 흐름을 사용하면 apphosting.yaml
에 보안 비밀 참조를 자동으로 추가할 수 있습니다.
Cloud Secret Manager의 전체 기능 모음을 사용하려면 대신 Cloud Secret Manager 콘솔을 사용하면 됩니다. 이 경우 CLI 명령어 firebase
apphosting:secrets:grantaccess
를 사용하여 App Hosting 백엔드에 권한을 부여해야 합니다.
Firebase 인증 상태 동기화
Firebase 인증을 사용하는 앱은 Firebase 웹 SDK를 사용하여 클라이언트와 서버 간에 인증 상태가 동기화된 상태를 유지하는 것이 좋습니다. 서비스 워커와 함께 FirebaseServerApp
를 구현하면 이 작업을 용이하게 할 수 있습니다. 기본 작업 흐름은 다음과 같습니다.
- 서버에 대한 요청 시 앱의 올바른 헤더를 추가하는 서비스 워커를 구현합니다.
- 서버의 요청에서 헤더를 가져오고
FirebaseServerApp
를 사용하여 인증 사용자로 변환합니다.