스토리지용 클라우드 클라이언트 라이브러리로 마이그레이션

Cloud Storage를 사용하면 애플리케이션으로 동영상 또는 이미지 파일과 같은 큰 데이터 객체를 제공하고 사용자가 큰 데이터 파일을 업로드할 수 있습니다. Python 2 런타임에서 App Engine은 Cloud Storage에서 객체를 쓰고 읽기 위한 고유 클라이언트 라이브러리를 제공합니다. 이 App Engine 라이브러리는 Python 3 런타임을 포함한 새로운 App Engine 런타임에서 사용할 수 없습니다.

Python 2 앱에서 GoogleAppEngineCloudStorageClient 라이브러리를 사용하는 경우 Python 3 런타임에서 앱을 실행하기 전에 Cloud Storage용 Cloud 클라이언트 라이브러리로 마이그레이션해야 합니다. 새 클라이언트 라이브러리를 사용하려면 앱만 마이그레이션하면 됩니다. 기존 Cloud Storage 버킷의 모든 데이터 객체와 권한은 변경되지 않으며 새 클라이언트 라이브러리를 사용하여 기존 버킷에 액세스할 수 있습니다.

App Engine과 Cloud 클라이언트 라이브러리 비교

유사점:

  • Cloud 클라이언트 라이브러리는 App Engine 클라이언트 라이브러리에서 사용 설정한 객체 읽기, 쓰기, 삭제, 나열 등의 모든 Cloud Storage 기능을 지원합니다. 마이그레이션할 때 코드를 약간만 변경하면 됩니다.

    Cloud 클라이언트 라이브러리는 또한 버킷 만들기 및 라벨링객체의 이전 버전 검색과 같은 추가 기능을 지원합니다.

차이점:

  • App Engine 라이브러리에서 객체 목록을 검색하는 함수는 비동기식으로 작동합니다. Cloud 클라이언트 라이브러리는 객체 나열을 위한 비동기 함수를 제공하지 않지만 페이징을 사용하고 작은 객체 집합을 통해 반복할 수 있습니다.

  • App Engine 클라이언트 라이브러리는 액세스 제어 목록(ACL)을 사용하여 버킷 및 객체에 대한 액세스를 제어해야 합니다. 하지만 Cloud Storage와 Cloud 클라이언트 라이브러리는 사용자에게 버킷과 객체에 대한 액세스 권한을 부여하는 두 가지 시스템인 ACL과 균일한 버킷 수준 액세스를 지원합니다. 균일한 버킷 수준 액세스는 모든 클라우드 리소스에서 더 단순하고 일관된 액세스 제어 환경을 제공합니다.

    Cloud 클라이언트 라이브러리로 마이그레이션한 후 App Engine 클라이언트 라이브러리에서 사용한 모든 ACL이 기존 버킷에 계속 적용되며 필요한 경우 ACL을 계속 사용할 수 있습니다.

    균일한 버킷 수준 액세스가 필요에 맞는 경우 새로 만드는 모든 버킷에 이 간단한 시스템을 사용하는 것이 좋습니다. 기존 버킷을 변환하면 동일한 버킷 수준 액세스를 사용할 수 있지만 앱에서 스토리지 객체에 대한 액세스를 보호하는 방법을 대폭 변경해야 할 수 있습니다.

코드 샘플:

마이그레이션을 시작하기 전에

아직 하지 않은 경우 Google Cloud와 호환되는 Python 버전을 사용하도록 Python 개발 환경을 설정하고 격리된 Python 환경을 만드는 테스트 도구를 설치하세요.

Cloud Storage 권한 이해하기

기본적으로 앱의 자동 생성된 기본 서비스 계정에는 프로젝트의 버킷에 대한 읽기 및 쓰기 권한이 포함되며, 마이그레이션 이전 및 이후에 계정이 생성하는 객체에 대해 모든 권한을 갖습니다.

다른 서비스 계정 또는 사용자 계정을 사용하여 Cloud Storage 버킷 및 객체에 대한 액세스를 보호한 경우 마이그레이션 전후에 동일한 계정과 인증 기술을 계속 사용해야 합니다.

마이그레이션 프로세스 개요

App Engine 클라이언트 라이브러리 대신 Cloud Storage용 Cloud 클라이언트 라이브러리를 사용하도록 Python 앱을 마이그레이션하려면 다음 안내를 따르세요.

  1. Cloud Storage용 Cloud 클라이언트 라이브러리를 설치합니다.

  2. Cloud 클라이언트 라이브러리를 사용하도록 코드를 업데이트합니다.

  3. 업데이트를 테스트합니다.

  4. App Engine에 앱을 배포합니다.

Cloud Storage용 Cloud 클라이언트 라이브러리 설치

App Engine에서 앱을 실행할 때 Cloud Storage용 Cloud 클라이언트 라이브러리를 앱에서 사용할 수 있도록 만들려면 다음 안내를 따르세요.

  1. app.yaml 파일을 업데이트합니다.

    1. Cloud 클라이언트 라이브러리를 사용하는 경우 최신 버전의 grpciosetuptools 라이브러리를 추가합니다.
    2. Cloud Storage에 필요한 ssl 라이브러리를 추가합니다.

    다음은 app.yaml 파일의 예시입니다.

    runtime: python27
    threadsafe: yes
    api_version: 1
    
    libraries:
    - name: grpcio
      version: 1.0.0
    - name: setuptools
      version: 36.6.0
    - name: ssl
      version: latest
    

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

  2. Cloud Storage용 Cloud 클라이언트 라이브러리를 종속 항목 목록에 추가하여 requirements.txt 파일을 업데이트합니다.

    google-cloud-storage==1.24.1
    

    Python 2.7 앱을 지원하므로 Cloud Storage 클라이언트 라이브러리의 1.24.1 버전을 사용하는 것이 좋습니다.

    그런 다음 pip install -t lib -r requirements.txt를 실행하여 앱에 사용 가능한 라이브러리 목록을 업데이트합니다.

  3. Python 2 앱의 경우 앱에서 기본 제공 또는 복사된 라이브러리를 사용한다면 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)
    

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

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
    

Cloud 클라이언트 라이브러리를 사용하도록 코드 업데이트

Cloud Storage 클라이언트 만들기

Cloud Storage용 Cloud 클라이언트 라이브러리를 사용하려면 Client 객체를 만듭니다. 클라이언트에는 Cloud Storage에 연결하는 데 필요한 사용자 인증 정보와 기타 데이터가 포함됩니다. 예를 들면 다음과 같습니다.

from google.cloud import storage

client = storage.Client()

이전에 설명한 기본 승인 시나리오에서 Cloud Storage 클라이언트는 프로젝트의 버킷 및 객체와 상호작용하도록 승인된 App Engine의 기본 서비스 계정에서 가져온 사용자 인증 정보를 포함합니다. 이 기본 시나리오에서 작업하지 않는 경우 사용자 인증 정보를 제공하는 방법에 대한 자세한 내용은 애플리케이션 기본 사용자 인증 정보(ADC)를 참조하세요.

Cloud 클라이언트 라이브러리 메서드 사용

다음 표에는 특정 Cloud Storage 기능을 구현할 때 사용할 Cloud 클라이언트 라이브러리의 메서드가 요약되어 있습니다.

Cloud Storage 기능 Cloud 클라이언트 메서드
버킷의 객체 나열 Client.list_blobs

간단한 코드 샘플디렉터리 모드 에뮬레이션 샘플을 참조하세요.

객체 목록에서 페이지를 이동하려면 Client.list_blobs를 반환하는 iterator 객체의 pages 속성을 사용합니다.

스토리지에 쓰기 blob.upload_from_file
blob.upload_from_filename
blob.upload_from_string

코드 샘플을 참조하세요.

ACL 지정 사전 정의된 ACL을 적용하려면 버킷을 만들거나 객체를 만들predefined_acl 매개변수를 사용합니다.

더 세밀하게 제어하려면 bucket.acl.reload() 또는 blob.acl.reload()를 사용하여 현재 정의된 모든 ACL을 검색합니다. 그런 후 ACL 메서드를 사용하여 ACL을 추가하거나 삭제합니다. 코드 샘플을 참조하세요.

스토리지에서 읽기 blob.download_to_file
blob.download_to_filename
blob.download_as_string

코드 샘플을 참조하세요.

객체 삭제 blob.delete

코드 샘플을 참조하세요.

객체 복사 bucket.copy_blob

코드 샘플을 참조하세요.

객체의 메타데이터 읽기 blob.propertyname

blob.metadata

코드 샘플을 참조하세요.

업데이트 테스트

로컬 환경에서 앱 업데이트를 테스트할 수 있지만 모든 Cloud Storage 요청은 인터넷을 통해 실제 Cloud Storage 버킷으로 전송해야 합니다. App Engine과 Cloud Storage 모두 Cloud Storage 에뮬레이터를 제공하지 않습니다.

Python 2 앱 테스트에 대한 자세한 내용은 로컬 개발 서버 사용을 참조하세요.

Python 3 앱 테스트에 대한 자세한 내용은 애플리케이션 테스트 및 배포를 참조하세요.

앱 배포

앱을 배포할 준비가 되었으면 다음을 수행해야 합니다.

  1. App Engine에서 앱을 테스트합니다.

  2. 앱이 오류 없이 실행되면 트래픽 분할을 사용하여 업데이트된 앱의 트래픽을 천천히 늘립니다. 앱을 면밀히 모니터링하여 문제가 없는 것을 확인한 후 더 많은 트래픽을 업데이트된 앱으로 라우팅합니다.