App Engine에서 앱을 업로드하고 실행하려면 앱을 배포합니다. 앱을 배포할 때 해당 앱의 버전과 관련 서비스를 App Engine에서 만듭니다. 모든 소스 코드와 구성 파일을 포함한 전체 앱을 배포하거나 개별 버전이나 구성 파일을 배포하고 업데이트할 수 있습니다.
앱을 프로그래매틱 방식으로 배포하려면 Admin API를 사용하세요.
시작하기 전에
앱을 배포하려면 다음 조건이 충족되어야 합니다.
Google Cloud 프로젝트의 소유자가 App Engine 애플리케이션을 만들어야 합니다.
사용자 계정에 필요한 권한이 있는지 확인합니다.
프로젝트에서 앱을 배포할 수 있는 권한을 Cloud Build에 부여합니다. 앱을 배포할 때 App Engine은 Cloud Build를 사용하여 컨테이너에 앱을 빌드하고 컨테이너를 앱 리전의 런타임에 배포합니다. Cloud Build에는 기본적으로 PHP 5 앱을 배포할 수 있는 권한이 없으므로 앱을 배포하려면 먼저 권한을 부여해야 합니다.
gcloud CLI 설치
gcloud CLI를 사용하여 앱을 배포하려면 gcloud CLI를 다운로드, 설치, 초기화해야 합니다.
이미 gcloud CLI가 설치되어 있고 초기화한 ID가 아닌 Google Cloud 프로젝트 ID를 사용하도록 구성하려면 CLI 구성 관리를 참조하세요.
프록시 사용
HTTP 또는 HTTPS 프록시를 사용하는 시스템에서 배포 명령어를 실행하려면 프록시를 통해 통신할 수 있도록 도구를 구성해야 합니다.
다음 명령어를 실행하여 gcloud CLI를 구성합니다.
gcloud config set proxy/type [PROXY_TYPE]
gcloud config set proxy/address [PROXY_ADDRESS]
gcloud config set proxy/port [PROXY_PORT]
프록시에 username
과 password
를 설정할 수도 있습니다. 자세한 내용은 gcloud config를 참조하세요.
앱 배포
App Engine에 앱을 배포하려면 구성 파일(예: app.yaml
)이 있는 위치에서 gcloud app deploy
명령어를 사용합니다.
고유한 버전 ID 선택
수동으로 확장된 인스턴스의 경우, 버전 ID는 숫자 인스턴스 ID와 구분되도록 문자로 시작해야 합니다. 이렇게 하면 요청이 올바른 대상으로 라우팅되며 다음과 같이 두 가지로 해석될 수 있는123-dot-my-service.[REGION_ID].r.appspot.com
과 같은 URL 패턴의 모호성을 방지할 수 있습니다.
123
버전이 있는 경우 요청은my-service
서비스의123
버전으로 라우팅됩니다.123
버전이 없으면 요청은my-service
서비스의 버전이 실행되는 인스턴스 ID123
으로 라우팅됩니다.
자동 확장 또는 기본 확장으로 구성된 인스턴스는 지원되지 않으므로, 이 인스턴스 버전에 원하는 대로 이름을 지정할 수 있습니다.
gcloud app deploy [CONFIGURATION_FILES]
기본적으로 이 명령어는 현재 디렉터리에서 app.yaml
구성 파일을 배포합니다. 앱의 app.yaml
가 없는 디렉터리에서 명령어를 실행할 경우나 여러 앱을 배포하려는 경우 [CONFIGURATION_FILES]
를 구성 파일 하나 이상에 대한 경로로 바꿉니다.
단일 공백을 사용하여 경로 이름을 구분합니다.
선택적 플래그:
--version
: 커스텀 버전 ID를 지정합니다. 기본적으로 App Engine은 버전 ID를 생성합니다.--no-promote
: 전체 트래픽을 해당 버전으로 자동 라우팅하지 않고 앱을 배포합니다. 기본적으로 배포하는 각 버전은 트래픽 전체를 수신하도록 자동으로 구성됩니다.--project
: 대체 Google Cloud 프로젝트 ID를 gcloud CLI에서 기본값으로 초기화한 값으로 지정합니다.
자세한 내용은 gcloud app deploy
참조를 확인하거나 명령줄에서 gcloud help
를 실행하세요.
예를 들면 다음과 같습니다.
gcloud app deploy
gcloud app deploy app.yaml dos.yaml index.yaml
gcloud app deploy --version [YOUR_VERSION_ID] --no-promote --project [YOUR_PROJECT_ID]
App Engine에 이미 존재하는 버전과 동일한 버전 ID를 지정하는 버전을 배포할 경우, 배포하는 파일이 기존 버전을 덮어쓰게 됩니다. 이 경우 해당 버전이 트래픽을 제공하면 애플리케이션 트래픽이 중단될 수 있으므로 문제가 발생할 수 있습니다. 버전 ID가 다른 새 버전을 배포한 후 이 버전으로 트래픽을 옮기면 트래픽 중단을 방지할 수 있습니다.
여러 서비스 애플리케이션 배포
애플리케이션이 여러 서비스에 반영되어 있으면 개별적으로 타겟팅된 서비스나 모든 서비스를 동시에 배포하고 업데이트할 수 있습니다. 서비스에 업데이트를 배포하는 작업에는 개별 구성 파일 업데이트 또는 해당 버전의 소스 코드 업데이트가 포함될 수 있습니다.
예를 들어 각 버전이 자체 서비스에서 실행되는 버전 두 개를 App Engine에서 배포하고 만들 수 있습니다. 한 버전은 앱의 프런트엔드 서비스로 작동하고 다른 버전은 백엔드로 작동합니다. 그런 다음 개별 구성 파일을 배포하여 서비스의 설정만 업데이트할 수 있습니다. 뿐만 아니라, 프런트엔드나 백엔드의 소스 코드를 업데이트하거나 두 소스 코드를 동시에 업데이트하기 위해 서비스에 새 버전을 배포할 수도 있습니다.
여러 서비스 요구사항
다음 요구사항에 따라 동일한 배포 명령어를 사용하여 애플리케이션의 여러 서비스를 배포하고 업데이트할 수 있습니다.
먼저 애플리케이션 버전을
default
서비스로 배포해야 이후에 서비스를 만들고 배포할 수 있습니다.해당 버전의
app.yaml
구성 파일에서 서비스 ID를 지정해야 합니다. 서비스 ID를 지정하려면 구성 파일마다service: [YOUR_SERVICE_ID]
요소 정의를 포함합니다. 기본적으로 구성 파일에서 이 요소 정의를 제외하면 해당 버전이default
서비스에 배포됩니다.여러 서비스를 동시에 배포하려면 배포 명령어에 해당되는 모든
app.yaml
구성 파일을 지정해야 합니다.
여러 서비스 배포
구성 파일이 있는 애플리케이션의 루트 디렉터리에서 배포 명령어를 실행하여 각 서비스의 app.yaml
파일에 상대 경로와 파일 이름을 지정합니다.
gcloud app deploy [CONFIGURATION_FILES]
여기서 [CONFIGURATION_FILES]
는 공백으로 구분한 1개 이상의 구성 파일 경로 및 이름입니다.
예
gcloud app deploy main/app.yaml service1/app.yaml service2/app.yaml
각 서비스가 성공적으로 배포되면 명령줄을 통해 인증을 받습니다.
빌드 로그 보기
Cloud Build는 Google Cloud 콘솔의 Cloud Build 기록 섹션에서 볼 수 있는 빌드 로그와 배포 로그를 스트리밍합니다. 앱 리전의 빌드를 보려면 페이지 상단에 있는 리전 드롭다운 메뉴를 사용하여 필터링할 리전을 선택합니다.
문제 해결
다음은 일반적으로 발생할 수 있는 오류 메시지입니다.
PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
- Google Cloud 프로젝트에 필수 App Engine 애플리케이션이 포함되어 있지 않은 경우
gcloud app create
명령어 실행을 시도하면gcloud app deploy
명령어가 실패할 수 있습니다. 소유자 역할이 있는 계정에만 App Engine 애플리케이션을 생성하는 데 필요한 권한이 있습니다. Command not found
- 로컬 개발 서버 도구 설정 방법은 로컬 개발 서버 사용을 참조하세요.
Import Error
- gcloud CLI와 원본 App Engine SDK를 모두 설치하면 PATH에 대한 항목이 서로 충돌하여 가져오기 오류가 발생할 수 있습니다. gcloud CLI 명령어를 실행할 때 오류가 발생하면 로컬 개발 서버 실행 안내를 따릅니다.
[400] The first service (module) you upload to a new application must be the 'default' service (module)
- 애플리케이션의 여러 서비스를 배포하고 만들려면 먼저
default
서비스를 배포하고 만들어야 합니다.default
서비스에 버전을 배포하는 방법에 대한 자세한 내용은 여러 서비스 애플리케이션 배포를 참조하세요. Too Many Versions (403)
- App Engine에는 애플리케이션의 배포 버전 수에 대한 제한이 있습니다. 이러한 제한은 무료 애플리케이션과 배포된 애플리케이션에서 서로 다르게 적용됩니다. Google Cloud 콘솔을 사용하여 이전 버전을 삭제한 후 최신 코드를 업로드할 수 있습니다.
[13] An internal error occurred while creating a Cloud Storage bucket.
App Engine이 애플리케이션 생성 리전과 동일한 리전에서 기본 Cloud Storage 멀티 리전 버킷을 만듭니다. 이 버킷은 애플리케이션의 콘텐츠를 저장하는 데 필요합니다. 이 오류는 다음 시나리오에서 이 버킷을 만들 수 없을 때 반환됩니다.
프로젝트에 기본 App Engine 서비스 계정이 없습니다. 삭제 후 30일이 지나기 전에 계정이 삭제되면 복원할 수 있습니다.
프로젝트가
constraints/gcp.resourceLocations
정책을 시행하는 조직에 속하며 조직에서 App Engine이 있는 동일한 리전에서의 리소스 생성을 허용하지 않습니다 프로젝트에 적용된constraints/gcp.resourceLocations
정책을 재정의하고 App Engine이 만들어진 동일한 리전에서 멀티 리전 위치를 허용해야 합니다.
[13] An internal error occurred
이 오류는 App Engine의
app.yaml
구성 파일에vpc_access_connector
키의 잘못된 리소스name
가 포함된 경우에 발생할 수 있습니다.name
필드에 서버리스 VPC 액세스 커넥터가 생성되는 올바른 프로젝트와 리전이 포함되어 있는지 확인합니다.app.yaml
구성이 유효한지 확인한 후 Google Cloud SDK를 사용하여 서비스를 다시 배포하고--verbosity=debug
플래그를 추가한 후 Cloud 지원에 연락하여 명령어 결과를 제공합니다.- 기타 배포 오류
배포에 실패하면 Cloud Build API가 프로젝트에 사용 설정되어 있는지 확인합니다. 앱을 처음 배포할 때 App Engine은 이 API를 자동으로 사용 설정하지만 이후 누군가가 API를 중지하면 배포가 실패합니다.
다음 단계
- 서비스를 사용하여 대규모 애플리케이션 구축
- 트래픽 분할 또는 트래픽 마이그레이션을 통해 배포하는 버전으로 트래픽 라우팅
gcloud app deploy
명령줄 인수 및 플래그 검토