GCE 자동 시작 및 자동 중지 스케줄링
이번에 하고 싶은 일
GCE 인스턴스의 자동 시작 및 자동 중지를 스케줄링하고 싶습니다.
예를 들면 낮 동안 밖에 사용하지 않기 때문에 밤등은 정지해 두고 아침이 되면 기동시키는 것으로 코스트 절약하고 싶은 등등. . .
AWS에서 말하기 Lambda의 Schedule 이벤트에서 EC2를 자동 시작 및 자동 중지해 보았습니다. #reinvent
GCP에는 AWS Lambda와 같은 Google Cloud Functions이 있지만
아직 막 나오면 Lamda와 같은 스케줄링 기능은 없습니다.
※2016/04/25 현재
GCP에서는 현재 스케줄링 등은 Google App Engine의 cron 서비스를 사용하는 것 같다.
h tps : // c ぉ d. 오, ぇ. 코 m / 아펜 기네 / 도 cs / py 텐 / 곤후 g / c 롱 # Py 텐 _ 아 p_ 나 ml_ 테 _ s ぇ ぇ _ ぇ r 마 t
검증 환경
credentials.json
로 한다 인스턴스 목록 가져오기
우선은 인스턴스 리스트를 취득해 인증이 올바르게 통과하고 있는지 등을 확인한다
#!/usr/bin/python
import os
from oauth2client.client import GoogleCredentials
from googleapiclient.discovery import build
root_path = os.path.dirname(os.path.realpath(__file__))
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '【credentials.jsonへのpath】'
credentials = GoogleCredentials.get_application_default()
compute = build('compute', 'v1', credentials=credentials)
project = '【プロジェクト名】'
zone = '【gceのインスタンスがあるゾーン】'
result_exec = compute.instances().list(project=project, zone=zone).execute()
items = result_exec['items']
for item in items:
print '''
id is %s
name is %s
zone is %s
status is %s
''' %(item['id'], item['name'], item['zone'], item['status'])
cron 설정, 실행 스크립트 등
cron.yaml
GAE 스케줄은 URL을 지정하고 스크립트를 실행합니다.
이 파일에서는 언제 어느 URL에 액세스 하는지를 지정한다.
schedule의 format에 대해서는 여기 를 본다
URL은 선택 사항일 수 있습니다.
이번에는/instance/start와/instance/stop을 작성했다고 합시다.
cron:
- description: instance start
url: /instance/start
schedule: every day 09:00
timezone: Asia/Tokyo
- description: instance stop
url: /instance/stop
schedule: every day 22:00
timezone: Asia/Tokyo
app.yaml
위에서 설정한 url이 액세스했을 때 실행하는 script를 정의한다.
login: admin
-----
handlers:
- url: /instance/start
script: instance.app
login: admin
- url: /instance/stop
script: instance.app
login: admin
인스 탄세. py
시작하거나 중지하는 스크립트가 있는 스크립트
#!/usr/bin/python
import os
import sys
import webapp2 as webapp
from google.appengine.ext import vendor
vendor.add('lib')
from oauth2client.client import GoogleCredentials
from googleapiclient.discovery import build
root_path = os.path.dirname(os.path.realpath(__file__))
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '【credentials.jsonへのpath】'
project = '【プロジェクト名】'
zone = '【gceのインスタンスがあるゾーン】'
instance_names = [インスタンス名の配列]
credentials = GoogleCredentials.get_application_default()
compute = build('compute', 'v1', credentials=credentials)
# 開始用のHandler class
class InstanceStartHandler(webapp.RequestHandler):
def get(self):
print 'instance start process start'
for instance_name in instance_names:
# project, zone, instance名からインスタンスの情報を取得
instance = compute.instances().get(project=project, zone=zone, instance=instance_name).execute()
print '%s is %s' %(instance['name'], instance['status'])
# インスタンスが停止している場合は開始処理を行う
if instance['status'] == 'TERMINATED':
print 'instance %s start......' %(instance['name'])
compute.instances().start(project=project, zone=zone, instance=instance['name']).execute()
print 'instance start process end'
# 停止用のHandler class
class InstanceStopHandler(webapp.RequestHandler):
def get(self):
print 'instance stop process start'
for instance_name in instance_names:
# project, zone, instance名からインスタンスの情報を取得
instance = compute.instances().get(project=project, zone=zone, instance=instance_name).execute()
print '%s is %s' %(instance['name'], instance['status'])
# インスタンスが動いている場合は止める処理を行う
if instance['status'] == 'RUNNING':
print 'instance %s stop......' %(instance['name'])
compute.instances().stop(project=project, zone=zone, instance=instance['name']).execute()
print 'instance stop process end'
# app.yamlで設定したURLと実行するclassのセットを配列で定義する
app = webapp.WSGIApplication(
[
('/instance/start', InstanceStartHandler),
('/instance/stop', InstanceStopHandler)
],
debug=True
)
폴더 구성
이번에는 3 개의 파일을 만났지만 폴더 구성은 다음과 같습니다.
※ GAE는 Django를 사용하고 있다고 가정합니다
이번에 작성·편집한 파일은 root_dir에 둔다
root_dir
├─ polls
| └─ ....
├─ lib
| └─ ....
├─ mysite
| └─ ....
└─ instance.py
└─ cron.yaml
└─ app.yaml
작업 업로드 및 확인
appcfg.py -A stellar-mercury-734 update app.yaml
appcfg.py -A stellar-mercury-734 update_cron .
여기까지 오면 GAE의 태스크 큐의 cron 작업에서 아래와 같이 설정한 것을 확인할 수 있다.
후에는 화면상에서 「지금 실행」하게 되어 시간이 될 때까지 속눈썹으로 지정한 인스턴스가 자동 기동, 자동 정지할 것
Tips
3rd party제의 툴을 사용할 때에는 아래와 같이 커멘드를 받아 Django의 lib내에 인스톨 한다
공식 문서
pip install -t lib oauth2client
Reference
이 문제에 관하여(GCE 자동 시작 및 자동 중지 스케줄링), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hatappi/items/a756ea8fd29d7d802e13텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)