이 가이드에서는 프런트엔드에 Node.js를 사용하고 백엔드에 MySQL을 사용하는 예시 로그북 앱을 배포합니다. 이 가이드를 완료하면 다음 리소스가 배포에 포함됩니다.
Deployment Manager를 처음 사용하는 경우에는 빠른 시작 또는 단계별 안내를 참조하세요.
시작하기 전에
- 이 가이드의 명령줄 예시를 사용하려면 'gcloud' 명령줄 도구를 설치합니다.
- 이 가이드의 API 예시를 사용하려면 API 액세스를 설정합니다.
- Compute Engine 네트워크 부하 분산 개요를 읽습니다.
- Docker 컨테이너 개요를 읽습니다.
리소스 템플릿 만들기
이 예시에서는 다양한 Google Cloud 리소스가 포함된 배포를 시작합니다. 시작하려면 이러한 리소스를 개별적으로 정의하는 템플릿을 만듭니다. 나중에 이러한 리소스를 최종 구성에서 호출합니다. 배포에는 다음 리소스가 포함됩니다.
- 앱에 대해 MySQL 데이터베이스를 호스팅하는 Compute Engine 인스턴스
- Node.js 앱에 대해 Docker 이미지를 사용하는 프런트엔드 인스턴스를 위한 인스턴스 템플릿
- 인스턴스 템플릿을 사용하여 2개의 프런트엔드 인스턴스를 만드는 관리형 인스턴스 그룹
- 들어오는 트래픽을 기준으로 추가 프런트엔드 인스턴스를 시작하거나 중지하는 자동 확장 처리
- 프런트엔드 인스턴스를 사용해서 작업을 수행할 수 있는지 여부를 확인하는 상태 확인
- 전달 규칙이 포함된 네트워크 부하 분산기
- 관리형 인스턴스 그룹의 대상 풀
MySQL 백엔드용 템플릿 만들기
이 앱의 백엔드는 MySQL Docker 컨테이너를 실행하는 단일 Compute Engine 인스턴스입니다. container_vm.py
템플릿은 Docker 컨테이너를 실행할 수 있는 Compute Engine 인스턴스를 정의합니다. 템플릿이 올바른 구조를 따르고 모든 필수 속성을 포함하도록 하려면 스키마 파일도 필요합니다.
아래 템플릿을 복사하거나 GitHub 저장소에서 다운로드합니다.
템플릿에는 이후 템플릿에서 정의되는 containerImage
와 같은 정의되지 않은 일부 속성이 포함됩니다.
Compute Engine 인스턴스에서 컨테이너 이미지를 사용할 경우 사용할 컨테이너 이미지를 설명하는 매니페스트 파일도 제공해야 합니다. container_helper.py
라는 도우미 메서드를 만들어서 컨테이너 매니페스트를 동적으로 정의합니다.
Node.js 프런트엔드용 템플릿 만들기
앱의 프런트엔드는 Node.js를 실행하고 사용자가 웹 페이지에 메시지를 게시할 수 있도록 합니다. 프런트엔드는 자동 확장 처리 및 부하 분산기에서 지원되는 가상 머신 인스턴스 그룹에서 실행됩니다. 프런트엔드 템플릿을 만들려면 다음 안내를 따르세요.
인스턴스 템플릿 리소스를 만듭니다.
단일 항목으로 제어되는 동일한 가상 머신(VM) 인스턴스의 그룹인 관리형 인스턴스 그룹을 만들려면 인스턴스 템플릿이 필요합니다.
container_instance_template.py
라는 파일을 만들고 템플릿의 스키마를 다운로드합니다.자동 확장 처리, 관리형 인스턴스 그룹, 부하 분산기를 만듭니다.
그런 다음
container_instance_template.py
템플릿을 사용하고 자동 확장 처리, 부하 분산기, 관리형 인스턴스 그룹을 비롯한 나머지 프런트엔드 리소스를 만드는 또 다른 템플릿을 만듭니다.
이 템플릿에는 다음 리소스가 포함됩니다.
container_instance_template.py
템플릿을 사용하는 인스턴스 템플릿관리형 인스턴스 그룹을 참조하는 자동 확장 처리인 인스턴스 템플릿을 사용하는 관리형 인스턴스 그룹. 참조를 사용하면 Deployment Manager가 특정 순서로 리소스를 만들도록 보장할 수 있습니다. 이 경우에는 관리형 인스턴스 그룹이 자동 확장 처리 이전에 생성됩니다.
다음 리소스를 포함하는 네트워크 부하 분산기
- 단일 외부 IP 주소가 인터넷에 노출되는 전달 규칙
- 이전에 생성한 관리형 인스턴스 그룹이 포함된 대상 풀
- 대상 풀에 연결할 상태 확인
frontend.py
라는 파일을 만들고 템플릿의 스키마를 다운로드합니다.
통합 템플릿 만들기
마지막으로 백엔드 및 프론트엔드 템플릿을 모두 제공하는 템플릿을 만듭니다. 다음 콘텐츠로 nodejs.py
라는 파일을 만듭니다.
앱의 프런트엔드 이름은 env["deployment"]-frontend
로 지정되고 백엔드 이름도 비슷하게 지정됩니다. 앱을 배포하면 Deployment Manager가 자동으로 env["deployment"]
를 배포 이름으로 바꿉니다.
구성 만들기
모든 템플릿이 준비되면 리소스를 배포하는 데 사용되는 구성을 만들 수 있습니다. 다음 콘텐츠로 nodejs.yaml
이라는 구성 파일을 만듭니다.
ZONE_TO_RUN
을 리소스가 필요한 영역으로 바꿉니다(예: us-central1-a
).
리소스 배포
이제 리소스를 배포합니다. Google Cloud CLI를 사용하여 다음을 실행합니다.
gcloud deployment-manager deployments create advanced-configuration --config nodejs.yaml
배포가 완료되면 Deployment Manager가 다음과 비슷하게 생성된 리소스 요약을 표시합니다.
Waiting for create operation-1468522101491-5379cf2344539-5961abe8-a500190c...done.
Create operation operation-1468522101491-5379cf2344539-5961abe8-a500190c completed successfully.
NAME TYPE STATE ERRORS
advanced-configuration-application-fw compute.v1.firewall COMPLETED []
advanced-configuration-backend compute.v1.instance COMPLETED []
advanced-configuration-frontend-as compute.v1.autoscaler COMPLETED []
advanced-configuration-frontend-hc compute.v1.httpHealthCheck COMPLETED []
advanced-configuration-frontend-igm compute.v1.instanceGroupManager COMPLETED []
advanced-configuration-frontend-it compute.v1.instanceTemplate COMPLETED []
advanced-configuration-frontend-lb compute.v1.forwardingRule COMPLETED []
advanced-configuration-frontend-tp compute.v1.targetPool COMPLETED []
앱 테스트
앱을 테스트하려면 먼저 전달 규칙을 쿼리하여 트래픽을 제공하는 외부 IP 주소를 가져옵니다.
$ gcloud compute forwarding-rules describe advanced-configuration-frontend-lb --region us-central1 IPAddress: 104.154.81.44 IPProtocol: TCP creationTimestamp: '2016-07-14T11:48:37.228-07:00' description: '' id: '9033201246750269546' kind: compute#forwardingRule name: advanced-configuration-frontend-lb portRange: 8080-8080 region: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1 selfLink: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/forwardingRules/advanced-configuration-frontend-lb target: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/targetPools/advanced-configuration-frontend-tp
이 경우 외부 IP는 104.154.81.44
입니다.
그런 다음 브라우저에서 포트 8080으로 외부 IP 주소에 방문합니다. 예를 들어 외부 IP 주소가 104.154.81.44
이면 URL은 다음과 같습니다.
http://104.154.81.44:8080
예상대로 빈 페이지가 표시되면 메시지를 게시합니다. 다음 URL로 이동합니다.
http://104.154.81.44:8080?msg=hellothere!
메시지가 추가되었음을 알리는 확인이 표시됩니다. 기본 URL로 돌아가면 페이지에 다음 메시지가 표시됩니다.
hellothere!
이제 전송된 메시지를 로깅할 수 있는 앱이 배포되었습니다.
다음 단계
이 샘플을 완료한 후에는 다음을 수행할 수 있습니다.
- 고유한 Docker 컨테이너로 인스턴스를 배포하여 이 예제를 더 확장합니다. 이 가이드에 사용된 Docker 컨테이너를 수정하려면 GitHub 저장소에서 Docker 파일을 편집합니다.
- Deployment Manager GitHub 저장소에서 다른 예시 배포를 참조합니다.
- 템플릿 및 배포에 대해 자세히 알아봅니다.