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을 계속 사용할 수 있습니다.
균일한 버킷 수준 액세스가 필요에 맞는 경우 새로 만드는 모든 버킷에 이 간단한 시스템을 사용하는 것이 좋습니다. 기존 버킷을 변환하면 동일한 버킷 수준 액세스를 사용할 수 있지만 앱에서 스토리지 객체에 대한 액세스를 보호하는 방법을 대폭 변경해야 할 수 있습니다.
코드 샘플:
App Engine API를 사용하는 기본 스토리지 작업
Cloud Storage용 Cloud 클라이언트 라이브러리를 사용하는 기본 스토리지 작업
마이그레이션을 시작하기 전에
Cloud Storage 권한 이해하기
기본적으로 앱의 기본 서비스 계정에는 프로젝트의 버킷에 대한 읽기 및 쓰기 권한이 포함되며, 마이그레이션 이전 및 이후에 계정이 생성하는 객체에 대해 모든 권한을 갖습니다.
다른 서비스 계정 또는 사용자 계정을 사용하여 Cloud Storage 버킷 및 객체에 대한 액세스를 보호한 경우 마이그레이션 전후에 동일한 계정과 인증 기술을 계속 사용해야 합니다.
마이그레이션 프로세스 개요
App Engine 클라이언트 라이브러리 대신 Cloud Storage용 Cloud 클라이언트 라이브러리를 사용하도록 Python 앱을 마이그레이션하려면 다음 안내를 따르세요.
Cloud Storage용 Cloud 클라이언트 라이브러리를 설치합니다.
Cloud 클라이언트 라이브러리를 사용하도록 코드를 업데이트합니다.
업데이트를 테스트합니다.
App Engine에 앱을 배포합니다.
Cloud Storage용 Cloud 클라이언트 라이브러리 설치
App Engine에서 앱을 실행할 때 Cloud Storage용 Cloud 클라이언트 라이브러리를 앱에서 사용할 수 있도록 만들려면 다음 안내를 따르세요.
app.yaml
파일과 동일한 폴더에requirements.txt
파일을 만들고 다음 행을 추가합니다.google-cloud-storage==1.24.1
Python 2.7 앱을 지원하므로 Cloud Storage 클라이언트 라이브러리의 1.24.1 버전을 사용하는 것이 좋습니다.
앱의
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 오류가 표시됩니다.
디렉터리를 만들어
lib/
같은 타사 라이브러리를 저장합니다. 그런 다음pip install
을 사용하여 디렉터리에 라이브러리를 설치합니다. 예를 들면 다음과 같습니다.pip install -t lib -r requirements.txt
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)
앞의 예시의
appengine_config.py
파일은lib
폴더가 현재 작업 디렉터리에 있다고 가정합니다.lib
가 항상 현재 작업 디렉터리에 있다고 보장할 수 없으면lib
폴더에 전체 경로를 지정합니다. 예를 들면 다음과 같습니다.import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
로컬 개발의 경우 Python 2용 virtualenv와 같은 가상 환경에 종속 항목을 설치하는 것이 좋습니다.
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
간단한 코드 샘플 및 디렉터리 모드 에뮬레이션 샘플을 참조하세요. 객체 목록에서 페이지를 이동하려면 |
스토리지에 쓰기 | blob.upload_from_file
blob.upload_from_filename
blob.upload_from_string
코드 샘플을 참조하세요. |
ACL 지정 | 사전 정의된 ACL을 적용하려면 버킷을 만들거나 객체를 만들 때 predefined_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 앱 테스트에 대한 자세한 내용은 애플리케이션 테스트 및 배포를 참조하세요.
앱 배포
앱을 배포할 준비가 되었으면 다음을 수행해야 합니다.
앱이 오류 없이 실행되면 트래픽 분할을 사용하여 업데이트된 앱의 트래픽을 천천히 늘립니다. 앱을 면밀히 모니터링하여 문제가 없는 것을 확인한 후 더 많은 트래픽을 업데이트된 앱으로 라우팅합니다.