기존 번들 서비스에서 마이그레이션

이제 기존 번들 서비스에서 제공하는 대부분의 기능이 Cloud 클라이언트 라이브러리에서 제공됩니다. 자세한 내용은 아래의 권장 옵션을 참조하세요.

프로젝트에서 번들되지 않은 솔루션으로 마이그레이션할 수 없는 경우 대체 수단으로 Python 3 앱에서 기존 번들 서비스를 계속 사용할 수 있습니다. 이 방식을 사용하면 나중에 마이그레이션 주기 시 번들되지 않은 서비스로 유연하게 전환할 수 있습니다.

기존 번들 서비스에서 마이그레이션한 후에는 App Engine을 계속 사용하거나 Cloud Run으로 마이그레이션할 수 있습니다. Cloud Run은 App Engine 환경을 개선하도록 설계되었으며 표준 환경과 가변형 환경의 최고의 기능을 다양하게 통합합니다. 기능 비교와 마이그레이션 방법을 알아보려면 App Engine 및 Cloud Run 비교 가이드를 참조하세요.

Google Cloud 는 Python 2 런타임의 일부 번들 서비스와 유사한 기능을 제공하는 독립형 제품을 제공합니다. 이미지 처리, 검색, 메시징과 같은 Google Cloud에서 별도의 제품으로 제공되지 않는 번들 서비스의 경우 이 가이드에서는 서드 파티 제공업체 또는 다른 해결 방법을 권장합니다.

이 페이지에서는 각 번들 서비스의 마이그레이션 경로를 소개합니다.

Google Cloud 권한 이해하기

마이그레이션한 앱과 앱에서 사용하는 Google Cloud 서비스는 더 이상 동일한 '샌드박스' 환경에서 실행되지 않으므로 앱은 각 서비스에 대한 액세스를 승인해야 합니다. 예를 들어 Datastore 모드의 Firestore(Datastore) 또는 Cloud Tasks와 상호작용하려면 앱에서 이러한 서비스에 액세스하도록 승인된 계정의 사용자 인증 정보를 제공해야 합니다.

기본적으로 App Engine 표준 런타임의 앱은 앱과 동일한 프로젝트에 있는 데이터베이스에 액세스하도록 승인된 App Engine 기본 서비스 계정의 사용자 인증 정보를 제공합니다.

다음 조건 중 하나라도 해당하는 경우 사용자 인증 정보를 명시적으로 제공하는 대체 인증 기술을 사용해야 합니다.

  • 앱과 Memorystore 데이터베이스가 서로 다른Google Cloud 프로젝트에 있는 경우

  • 기본 App Engine 서비스 계정에 할당된 역할이 변경된 경우

대체 인증 기술에 대한 자세한 내용은 서버 간 프로덕션 애플리케이션용 인증 설정을 참조하세요.

로컬 개발을 위한 인증

로컬에서 앱을 개발 또는 테스트하려면 서비스 계정을 만들어 사용하는 것이 좋습니다. App Engine 기본 서비스 계정을 사용하지 마세요. 프로젝트의 모든 권한이 높은 수준이기 때문입니다. 대신 특정 개발 및 태스크 테스트에 필요한 권한을 가장 낮은 수준으로 가진 서비스 계정을 만들고 사용합니다.

서비스 계정을 설정하고 앱에 연결하는 방법은 수동으로 서비스 계정 사용자 인증 정보 획득 및 제공을 참조하세요.

클라이언트 라이브러리 설치

Python 앱에서 Google Cloud 서비스를 사용하는 가장 쉬운 방법은 서비스의 Python 클라이언트 라이브러리를 설치하는 것입니다. Google Cloud 서비스는 JSON REST 및 기타 인터페이스도 제공합니다. Python 2 앱과 Python 3 앱의 경우 클라이언트 라이브러리를 App Engine 런타임에 설치하는 단계가 다릅니다.

Python 2 앱용 라이브러리 설치

앱이 Python 2 런타임에서 실행될 때 사용할 라이브러리를 설치하려면 다음 안내를 따르세요.

  1. 디렉터리를 만들어 lib/ 같은 서드 파티 라이브러리를 저장합니다.

  2. app.yaml 파일과 동일한 폴더에 requirements.txt 파일을 만들고 클라이언트 라이브러리의 이름을 추가합니다.

    예를 들어 다음 파일을 사용하여 Pub/Sub, Cloud Tasks에 라이브러리를 설치할 수 있습니다.

    google-cloud-pubsub
    google-cloud-tasks
    
  3. pip install를 사용하여 만든 폴더에 라이브러리를 설치합니다. 예를 들면 다음과 같습니다.

    pip install -t lib -r requirements.txt
  4. 앱의 app.yaml 파일에서 libraries 섹션에 필수 Google RPC 및 setuptools 라이브러리와 선택적 SSL 라이브러리를 지정합니다.

    libraries:
    - name: grpcio
      version: 1.0.0
    - name: setuptools
      version: 36.6.0
    - name: ssl
      version: latest
    

    일부 클라이언트 라이브러리는 SSL 라이브러리가 필요하지 않습니다. 필요한 클라이언트 라이브러리의 SSL 라이브러리를 포함하지 않은 경우 앱에서 요청을 수신하면 로그 탐색기에 SSL 오류가 표시됩니다.

  5. 아직 없으면 app.yaml 파일과 같은 폴더에 appengine_config.py 파일을 만듭니다. appengine_config.py 파일에 다음을 추가합니다.

    # appengine_config.py
    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set path to your libraries folder.
    path = 'lib'
    # Add libraries installed in the path folder.
    vendor.add(path)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(path)

    pkg_resources 모듈을 사용하여 앱이 클라이언트 라이브러리의 올바른 배포를 사용하는지 확인합니다.

    앞의 예시의 appengine_config.py 파일은 lib 폴더가 현재 작업 디렉터리에 있다고 가정합니다. lib가 항상 현재 작업 디렉터리에 있다고 보장할 수 없으면 lib 폴더에 전체 경로를 지정합니다. 예를 들면 다음과 같습니다.

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
  6. 앱을 배포합니다.

App Engine은 appengine_config.py 파일에 지정한 디렉터리의 모든 라이브러리를 Python 2 런타임에 업로드 합니다.

Python 3 앱용 라이브러리 설치

앱이 Python 3 런타임에서 실행될 때 사용할 라이브러리를 설치하려면 다음 안내를 따르세요.

  1. 앱의 requirements.txt 파일에 라이브러리 이름을 추가합니다. 예를 들면 다음과 같습니다.

    google-cloud-ndb
    
  2. 앱을 배포합니다.

App Engine은 requirements.txt 파일에 나열된 모든 라이브러리를 Python 3 런타임에 자동으로 업로드합니다.

App Engine 번들 서비스의 마이그레이션 경로

Blobstore

데이터를 저장 및 검색하려면 Cloud 클라이언트 라이브러리를 통해 Cloud Storage를 사용합니다. 시작하려면 Cloud Storage 사용 , Blobstore에서 Cloud Storage로의 마이그레이션 가이드를 참조하세요. 이 마이그레이션을 시뮬레이션하려면 샘플 앱에 Blobstore 사용을 추가하고 Cloud Storage로 마이그레이션합니다.

Datastore

Python 2 앱이 NDB를 사용하여 Datastore와 상호작용하는 경우 Cloud NDB 라이브러리로 마이그레이션합니다. Cloud NDB는 주로 Python 2 앱 마이그레이션을 위한 전환 도구입니다. Python 3 앱은 Datastore 모드 클라이언트 라이브러리를 사용하는 것이 좋습니다.

자세한 내용은 Cloud NDB로 마이그레이션을 참조하세요. 샘플 앱으로 이 마이그레이션을 시뮬레이션하려면 App Engine NDB에서 Cloud NDB로 마이그레이션을 참조하세요.

이미지

Cloud Storage에서 이미지를 제공하거나, 직접 제공하거나, 타사 콘텐츠 전송 네트워크(CDN)를 사용할 수 있습니다.

이미지의 크기를 조절하고 변환하고 조작하려면Pillow 또는 Python interface for ImageMagick 같은 이미지 처리 라이브러리를 사용하세요.

이러한 서드 파티 라이브러리 중 하나를 사용하려면 라이브러리를 종속 항목으로 추가하고 라이브러리의 API를 호출하도록 코드를 업데이트합니다.

또한 App Engine 이미지 서비스는 제공 URL로 이미지 크기 조절을 처리하여 애플리케이션으로의 동적 요청을 방지하는 기능을 제공합니다. 유사한 기능이 필요한 경우 크기가 조절된 이미지를 미리 생성하고 Cloud Storage에 업로드하여 제공할 수 있습니다. 또는 이미지 크기 조절 기능을 제공하는 서드 파티 콘텐츠 전송 네트워크(CDN) 서비스를 사용할 수도 있습니다.

로깅

로그 탐색기에서 로그 보기, 로그 다운로드, 심각도별로 메시지 필터링, 특정 요청과 앱 메시지 간의 상관관계와 같은 기능을 지원하는 Cloud Logging을 사용하도록 앱을 업데이트하는 것이 좋습니다. 또는 데이터 정확성보다 단순성을 원하는 경우 구조화된 로그를 stdout 또는 stderr에 작성하면 됩니다. 자세한 내용은 로그 작성 및 보기Cloud Logging으로 마이그레이션을 참조하세요.

메일

이메일을 보내려면 SendGrid, Mailgun 또는 Mailjet과 같은 타사 메일 공급업체를 사용하세요. 이러한 모든 서비스는 애플리케이션에서 이메일을 보낼 수 있는 API를 제공합니다. 현재 인바운드 메시지에 권장되는 서드 파티 대안은 사용할 수 없습니다.

Memcache

애플리케이션 데이터를 캐시하려면 Redis용 Memorystore를 사용합니다.

자세한 내용은 Memcache를 Memorystore로 마이그레이션하기를 참조하세요. 이 마이그레이션을 시뮬레이션하려면 샘플 앱에 Memcache 사용을 추가하고 Redis용 Memorystore로 마이그레이션합니다.

NDB(또는 Cloud NDB) 요청의 지연 시간을 줄이기 위해 Memcache만 사용하는 앱의 경우 Memcache 또는 Redis용 Memorystore 대신 Cloud NDB의 기본 제공 Redis 지원을 사용하세요.

모듈

애플리케이션의 실행 서비스 정보를 가져오고 수정하려면 환경 변수와 App Engine Admin API를 함께 사용합니다.

서비스 정보 액세스 방법
현재 애플리케이션 ID GAE_APPLICATION 환경 변수
현재 프로젝트 ID GOOGLE_CLOUD_PROJECT 환경 변수
현재 서비스 이름 GAE_SERVICE 환경 변수
현재 서비스 버전 GAE_VERSION 환경 변수
현재 인스턴스 ID GAE_INSTANCE 환경 변수
기본 호스트 이름 Admin API apps.get 메서드
서비스 목록 Admin API apps.services.list 메서드
서비스 버전 목록 Admin API apps.services.versions.list 메서드
트래픽 분할을 포함한 서비스 기본 버전 Admin API apps.services.get 메서드
특정 버전으로 실행 중인 인스턴스 목록 Admin API apps.services.versions.instances.list 메서드

애플리케이션의 실행 서비스에 사용할 수 있는 데이터에 대한 상세 내용은 Python 3 런타임 환경을 참조하세요.

네임스페이스

Namespaces API는 테넌트마다 고유한 네임스페이스 문자열을 지정하여 각 테넌트의 데이터를 간단히 분리할 수 있도록 멀티 테넌트 앱을 지원하였습니다.

Datastore는 직접 멀티테넌시를 지원하지만 다른 Google Cloud서비스는 지원하지 않습니다. 멀티테넌트 앱이 다른 Google Cloud서비스를 사용하는 경우 멀티테넌시를 수동으로 처리해야 합니다. 서비스 인스턴스를 완전히 분리하려면 Cloud Resource Manager API를 사용하여 프로그래매틱 방식으로 새 프로젝트를 만들고 프로젝트 전체에서 리소스에 액세스하면 됩니다.

OAuth

App Engine OAuth 서비스를 사용하여 OAuth 2.0 토큰을 확인하는 대신 OAuth 2.0 APIoauth2.tokeninfo 메서드를 사용합니다.

Compute Engine의 ElasticSearch와 같은 전체 텍스트 검색 데이터베이스를 호스팅하고 서비스에서 이 데이터베이스에 액세스합니다.

태스크 큐

App Engine 태스크 큐 서비스는 두 가지 모드로 사용 가능합니다. 한 지점에서 두 개의 서로 다른 독립형 Cloud 제품으로 마이그레이션합니다.

푸시 태스크

비동기 코드 실행을 위한 App Engine 태스크 큐 푸시 태스크 서비스 대신 Python 3 표준 환경 엔드포인트가 있는 Cloud Tasks 클라이언트 라이브러리를 대상으로 사용합니다. 자세한 내용은 push 큐를 Cloud Tasks로 마이그레이션을 참고하세요.

샘플 앱으로 이 마이그레이션을 시뮬레이션하려면 Flask 앱에서 App Engine push 큐를 사용하는 방법Cloud Tasks로 마이그레이션하는 방법을 참조하세요.

풀 태스크

별도의 작업자가 처리할 태스크나 메시지를 큐에 추가와 같이 태스크 큐 풀 태스크 서비스를 사용하는 경우 Cloud Pub/Sub가 좋은 대안이 될 수 있습니다. 유사한 기능과 전송 보장을 제공합니다. 다른 Cloud 서비스와 마찬가지로 Pub/Sub는 서비스에 액세스하는 편리한 클라이언트 라이브러리를 제공합니다. 자세한 내용은 Pub/Sub 메시지 쓰기 및 응답Pub/Sub으로 태스크 큐 풀 태스크 마이그레이션 가이드를 참조하세요.

샘플 앱으로 이 마이그레이션을 시뮬레이션하려면 샘플 앱에 App Engine pull 태스크를 사용하는 방법Pub/Sub로 마이그레이션하는 방법을 참고하세요.

URL 가져오기

기본적으로 Python 2.7 런타임은 URL Fetch 서비스를 사용하여 아웃바운드 HTTP(S) 요청을 처리합니다. 표준 Python 라이브러리를 사용하여 이러한 요청을 실행하는 경우에도 마찬가지입니다.

앱에서 URL Fetch API를 직접 사용하는 경우(예: 비동기식 요청을 위해) 요청 라이브러리와 같은 표준 Python 라이브러리로 마이그레이션하는 것이 좋습니다.

자세한 내용은 아웃바운드 요청 마이그레이션을 참조하세요.

사용자 인증

Users API의 대안으로 사용자 인증 페이지에 설명된 HTTP 기반 인증 메커니즘을 사용합니다.