이 가이드에서는 Cloud Deployment Manager를 사용하여 Python Bookshelf 샘플 앱을 배포하는 방법을 보여줍니다.
Deployment Manager를 사용하면 선언적이고 반복 가능한 프로세스를 통해 배포에 필요한 Google Cloud 리소스를 한 번에 만들 수 있습니다. Deployment Manager를 사용하면 배포를 업데이트하고, 시간 경과에 따라 수정 사항을 추적하고, Jinja 또는 Python을 사용하여 템플릿을 만들고, 템플릿을 매개변수화하여, 유사한 배포에 하나의 템플릿이 공유되도록 할 수 있습니다.
목표
- Bookshelf 샘플 앱 복제 및 구성
- Deployment Manager 구성 및 템플릿 만들기
- Deployment Manager 배포 만들기
- Deployment Manager를 사용하여 Bookshelf 샘플 앱 배포
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Python,
pip
,virtualenv
를 시스템에 설치합니다. 자세한 내용은 Google Cloud를 위한 Python 개발 환경 설정을 참조하세요.
Cloud Storage 버킷 만들기
다음 안내에서는 Cloud Storage 버킷을 만드는 방법을 보여줍니다. 버킷은 Cloud Storage에서 데이터를 보관하는 기본 컨테이너입니다.
터미널 창에서 Cloud Storage 버킷을 만듭니다. YOUR_BUCKET_NAME은 버킷의 이름을 나타냅니다.
gsutil mb gs://YOUR_BUCKET_NAME
버킷의 기본 액세스제어 목록(ACL)을
public-read
로 설정하여 Bookshelf 앱에 업로드된 이미지를 확인합니다.gsutil defacl set public-read gs://YOUR_BUCKET_NAME
샘플 앱 복제
샘플 앱은 GitHub의 GoogleCloudPlatform/getting-started-python
에 있습니다.
저장소를 클론합니다.
git clone https://github.com/GoogleCloudPlatform/getting-started-python.git -b steps
샘플 디렉토리로 이동합니다.
cd getting-started-python/7-gce
앱 구성
수정할
config.py
을 엽니다.PROJECT_ID
값을 프로젝트 ID로 설정합니다.CLOUD_STORAGE_BUCKET
값을 Cloud Storage 버킷의 이름으로 설정합니다.
저장 후
config.py
을 닫습니다.
로컬 컴퓨터에서 앱 실행
격리된 Python 환경을 만들고 종속 항목을 설치합니다.
Linux/macOS
virtualenv -p python3 env source env/bin/activate pip install -r requirements.txt
Windows
virtualenv -p python3 env env\scripts\activate pip install -r requirements.txt
애플리케이션을 실행합니다.
python main.py
웹브라우저에 다음 주소를 입력합니다.
로컬 웹 서버를 중지하려면 Control+C를 누릅니다. 가상 환경을 종료하려면 deactivate
를 입력합니다.
샘플 앱 배포
저장소에 코드 푸시
실행 중인 Compute Engine 인스턴스에 여러 방법으로 코드를 가져올 수 있습니다. 하나는 Cloud Source Repositories를 사용하는 것입니다. 모든 프로젝트에는 Compute Engine 인스턴스에 사용할 수 있는 Git 저장소가 포함되어 있습니다. 그런 후 시작 중에 인스턴스가 앱 코드의 최신 버전을 가져옵니다. Git 저장소를 사용하면 앱을 업데이트할 때 새 이미지 또는 인스턴스를 구성할 필요가 없으므로 편리합니다. 기존 인스턴스를 다시 시작하거나 새 인스턴스를 만들기만 하면 됩니다.
Git를 처음 사용하는 경우
git config --global
을 사용하여 ID를 설정합니다.Cloud Console에서 저장소를 만듭니다.
그런 다음
[YOUR_PROJECT_ID]
가 프로젝트 ID이고[YOUR_REPO]
가 저장소 이름인 프로젝트 저장소에 앱 코드를 푸시합니다.git commit -am "Updating configuration" git config credential.helper gcloud.sh git remote add cloud https://source.developers.google.com/p/[YOUR_PROJECT_ID]/r/[YOUR_REPO] git push cloud master
배포를 만듭니다.
구성이 커밋되고 코드가 Cloud Source Repositories로 업로드된 다음에는 Deployment Manager를 사용하여 배포를 만들 수 있습니다.
deployment_manager
디렉터리로 이동합니다.cd getting-started-python/7-gce/gce/deployment_manager
배포를 만듭니다.
gcloud deployment-manager deployments create my-deployment --config config.yaml
모든 배포 목록을 확인합니다.
gcloud deployment-manager deployments list
배포 및 리소스에 대한 설명을 가져옵니다.
gcloud deployment-manager deployments describe my-deployment
앱 보기
전달 규칙을 만든 후 구성이 적용되고 트래픽이 인스턴스로 라우팅되기까지 몇 분이 걸릴 수 있습니다.
진행 상태를 확인하려면 다음 안내를 따르세요.
gcloud compute backend-services get-health bookshelf-my-deployment-frontend --global
인스턴스 중 하나 이상이
HEALTHY
를 보고하면 부하 분산기의 전달 IP 주소를 가져옵니다.gcloud compute forwarding-rules list --global
IP 주소 전달 규칙은
IP_ADDRESS
열에 있습니다.브라우저에서 목록의 IP 주소를 입력합니다.
이제 앱이 Google Cloud에서 실행됩니다.
코드 이해하기
배포 구성
배포가 구성된 방법은 config.yaml
에서 확인할 수 있습니다.
구성 파일은 템플릿 파일을 리소스로 가져오고 이를 사용해서 bookshelf
리소스를 정의합니다. 템플릿은 여러 속성을 매개변수로 사용합니다. Deployment Manager 구성 파일 만들기에 대한 자세한 내용은 구성 만들기를 참조하세요.
배포 템플릿의 스키마 구성
해당 구성 파일에 배포가 제공할 것으로 예상되는 매개변수를 정의하고 문서화하는 스키마 파일 bookshelf.jinja.schema
를 확인합니다. 구성 스키마에 대한 자세한 내용은 스키마 사용을 참조하세요.
배포 템플릿 구성
템플릿은 자동 확장, 부하 분산, 관리형 인스턴스 그룹을 만드는 데 필요한 여러 리소스를 정의합니다. 생성된 리소스에 대한 전체 설명은 템플릿의 주석을 참조하고, Compute Engine의 Bookshelf 가이드를 참조하세요.
Deployment Manager는 클라우드 리소스를 선언적으로 정의하는 방법을 제공하지만, 주어진 리소스에 대한 대부분의 구성은 해당 API에 의해 정의됩니다. 예를 들어 인스턴스 템플릿 리소스의 구성 옵션 대부분은 Compute Engine API 참조 문서의 인스턴스 템플릿 리소스 정의에서 찾을 수 있습니다.
템플릿은 Jinja 템플릿 언어를 사용하여 작성됩니다. Deployment Manager 템플릿을 작성할 때 Jinja 또는 Python을 사용할 수 있습니다. Jinja는 선언적인 면이 강해서 Python보다 읽고 이해하기 쉽다는 이점이 있습니다. 복잡한 배포의 경우 Python의 완전한 표현 능력을 활용하면 더 간편하게 작업할 수 있습니다. 이 경우 Jinja로도 충분히 필요한 리소스를 만들 수 있습니다.
템플릿에서 특정 환경 변수는 자동으로 설정되며, env
사전을 사용하여 이러한 변수에 액세스할 수 있습니다. 이 경우에는 생성된 리소스에 이름을 할당할 때 다시 사용할 수 있는 이름으로 배포 이름을 참조합니다. 사용 가능한 환경 변수에 대한 자세한 내용은 Deployment Manager 문서에서 환경 변수 사용을 참조하세요.
템플릿은 Compute Engine 가이드에 사용된 것과 동일한 시작 스크립트를 사용합니다. 스크립트의 콘텐츠가 템플릿에 삽입되고 Jinja 들여쓰기 간격 지시문이 콘텐츠를 올바르게 들여쓰기 합니다.
Deployment Manager Jinja 템플릿에서 템플릿의 다른 곳에서 생성된 리소스를 참조할 수도 있습니다. 다음 예시에서 백엔드 서비스는 관리형 인스턴스 그룹의 참조를 사용하여 연결할 인스턴스 그룹을 가져옵니다.
config.yaml
에 지정된 속성을 템플릿에서 사용할 수 있습니다.
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
프로젝트 삭제
비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.
프로젝트를 삭제하는 방법은 다음과 같습니다.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
배포 삭제
배포를 삭제하려면 다음 명령어를 입력합니다. 이 명령어는 배포와 연결된 부하 분산기 및 모든 Compute Engine 인스턴스를 삭제합니다.
gcloud deployment-manager deployments delete my-deployment
다음 단계
Deployment Manager 템플릿 정의 자세히 알아보기
Google Kubernetes Engine에서 Python Bookshelf 샘플 앱을 실행하는 방법 알아보기
Google Cloud에 대한 참조 아키텍처, 다이어그램, 가이드, 권장사항 살펴보기 Cloud 아키텍처 센터 살펴보기
다른 Google Cloud 서비스 알아보기