Migracja aplikacji na Google App Engine do nowego High Replication Datastore

Google jakiś czas temu ogłosiło zmiany na platformie GAE - aplikacje Datastore master/slave zostaną wyłączone 6 lipca 2015. Wszystkie stare aplikacje należy zmigrować do nowego typu aplikacji z High Replication Datastore. Proces migracji jest prosty, choć może nieco różnić się dla każdej aplikacji.

Aktualizacja aplikacji do HRD

Dostępny jest szczegółowy przewodnik migracji. W skrócie musimy utworzyć nową aplikację na Google App Engine wybierając HRD. Następnie wrzucamy na nią kod migrowanej aplikacji. Gdy to się uda wchodzimy do ustawień starej aplikacji i wyszukujemy Migration tool, gdzie możemy wybrać docelową aplikację HRD i rozpocząć proces migracji. Gdy dobiegnie on końca stary adres na appspot.com będzie aliasem do nowej aplikacji HRD.

Rozpoczęcie migracji do HRD

Rozpoczęcie migracji do HRD

W pewnym momencie przełączamy starą aplikację w tryb tylko do odczytu

W pewnym momencie przełączamy starą aplikację w tryb tylko do odczytu

Na końcu potwierdzamy zakończenie migracji co stworzy alias

Na końcu potwierdzamy zakończenie migracji co stworzy alias

Przy wrzucaniu kodu do nowej aplikacji można dokonać innych aktualizacji zalecanych przez Google. Ja miałem dwie proste aplikacje wykorzystujące webapp i Pythona 2.5. Przy przechodzeniu na HRD zyskujemy dostęp do Pythona 2.7 i nowych wersji bibliotek, w tym webapp2. Zmian jest nieco więcej. W moim przypadku zmian było kilka:

  • W app.yaml wybrać Pythona 2.7: runtime: python27. Trzeba też dodać threadsafe: true
  • Webapp2 ma też nieco inną konfigurację. Jeżeli wcześniej mieliśmy pod główny URL podpięte widoki w pliku views.py to teraz trzeba tam wstawić nazwę aplikacji - views.app
  • Do obsługi szablonów w webapp2 dostępnych jest kilka bibliotek, najprościej przy migracji użyć jinja. Żeby to było możliwe do app.yaml dodajemy konfigurację:
libraries:
- name: webapp2
  version: latest
- name: jinja2
  version: latest
Następnie trzeba zabrać się za migrację kodu. Lokalny serwer deweloperski jest oczywiście nieodzowny do testowania i debugowania. W porównaniu do webapp nowa wersja ma prostszy szkielet aplikacji, jak i np. odmienną obsługę szablonów, oto przykład:
# -*- coding: utf-8 -*-
import os

import jinja2
import webapp2

JINJA_ENVIRONMENT = jinja2.Environment(
    loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
    extensions=['jinja2.ext.autoescape'],
    autoescape=True)


class MainPage(webapp2.RequestHandler):
    def get(self):
        template = JINJA_ENVIRONMENT.get_template('templates/main_page.html')
        self.response.write(template.render({}))


app = webapp2.WSGIApplication([
    ('/', MainPage),
], debug=True)

Dla webapp2 dostępny jest tutorial na stronach dokumentacji Google App Engine. Na końcu oczywiście wyłączamy debug... W efekcie migracji możemy cieszyć się z działającej aplikacji działającej na najnowszych komponentach, np. pythonmore.appspot.com ;)

RkBlog

Google App Engine (GAE), 3 May 2015, Piotr Maliński

Comment article
RkBlog main page Search RSS Contact