User Tools

Site Tools


cloud:gcp

This is an old revision of the document!


Google Cloud Platform

Goolge App Engine

Maven

Deploy the app to the Google server
mvn appengine:update

After deployment the app will be available under: PROJECTAME.appspot.com

Start local development server
mvn appengine:devserver

available under localhost:8080/SERVLET/PATH/FROM/WEB/XML

e.g. http://localhost:8080/rest/

Stops the server
mvn appengine:devserver_stop

Project

Use the HelloWorld project from here: https://cloud.google.com/appengine/docs/java/

Create a Project on the “Google App Engine” using the online console: https://console.cloud.google.com/project

Servlets

Inherit from HttpServlet. Registered in webapp/WEB-INF/web.xml

  <servlet>
    <servlet-name>query</servlet-name>
    <servlet-class>de.projectname.servlet.QueryDbExamplesServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>query</servlet-name>
    <url-pattern>/rest/query/*</url-pattern>
  </servlet-mapping>

Google Datastore

Spring boots with datastore

The Codelabs tutorial about creation of a new Spring boot application for app engine https://codelabs.developers.google.com/codelabs/cloud-app-engine-springboot/#0

Datastore dependencies

The maven dependencies are listed here

<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-datastore</artifactId>
  <version>1.28.0</version>
</dependency>

https://cloud.google.com/datastore/docs/reference/libraries

Datastore usage

Create a JSON key using the online console: https://console.cloud.google.com/project/_/apiui/credential

Download the key e.g. as projectiname-e1234567891.p12 and put it into your WEB-INF folder, e.g. into Keys subfolder:
WEB-INF/keys/projectiname-e1234567891.json

	public static final String PROJECT_ID = "projectiname";
	public static final String PATH_TO_JSON_KEY = "/WEB-INF/keys/projectiname-e1234567891.json";


	public static Datastore initDataStore(GenericServlet servlet) {
		try {
			URL theurl = servlet.getServletContext().getResource(PATH_TO_JSON_KEY);
			File file = new File(theurl.toURI());
			FileInputStream fileInputStreamKey = new FileInputStream(file);

			return DatastoreOptions.builder().projectId(PROJECT_ID)
					.authCredentials(AuthCredentials.createForJson(fileInputStreamKey)).build().service();
		} catch (URISyntaxException | IOException e1) {
			return null;
		}
	}

Now you can query the DB:

			Datastore datastore = initDataStore(servlet);
			
			Builder queryBuilder = Query.entityQueryBuilder()
			.kind(FILM_DATA_KEY);

			// filter if imdbId is given
			if(imdbId!=null && !imdbId.isEmpty()){
				String imdbUrl = String.format("http://www.imdb.com/title/%s/", imdbId.replace("/", ""));
				Filter imdbUrlFilter =	PropertyFilter.eq("imdbUrl", imdbUrl);
				queryBuilder.filter(imdbUrlFilter);
			}
			
			// sort
			queryBuilder.orderBy(OrderBy.asc("created"));
			
			Query<Entity> query = queryBuilder.build();
			Iterator<Entity> iterator = datastore.run(query);

index

To query the DB an index for the queried Entity properties must be created. Here the properties are:

  • imdbUrl
  • created

The index is created in a index.yaml file, which is:

  • put into the WEB-INF folder
  • deployed together with the app

Example index.yaml

indexes:

- kind: FilmData
  ancestor: no
  properties:
  - name: imdbUrl
  - name: created
    direction: asc

appengine-web.xml

Dexcribes the app:

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
	<application>projectiname</application>
	<version>1</version>
	<threadsafe>true</threadsafe>
	<system-properties>
		<property name="java.util.logging.config.file" value="WEB-INF/logging.properties" />
	</system-properties>
	<static-files>
		<include path="/static/">
			<http-header name="Access-Control-Allow-Origin" value="*" />
		</include>
	</static-files>
</appengine-web-app>

Logging

Described in a WEB-INF/logging.properties

# Set the default logging level for all loggers to WARNING
.level = INFO

The logs are visible in the console window, where the server is running.

cloud/gcp.1527255494.txt.gz · Last modified: (external edit)