In this codelab, we will be building an application that combines several GCP services to build a fully functioning application. The application we will build utilizes Google App Engine for our user traffic and backend processing tasks, Google Cloud SQL for storage, and Google Cloud NL for sentiment analysis.
This codelab builds upon some of Google's Codelabs:
- Getting Started with App Engine (Python)
- Entity and Sentiment Analysis with the Natural Language API
- Create a Managed MySQL database with Cloud SQL
This codelab may be followed along by cloning this repository, then following this README.
This codelab should be completed using the Google Cloud Shell. This is what all of the Google provided codelabs recommend using as well. Cloud Shell is accessed from the Google Cloud Console, by clicking the button to the right of the search box:
I recommend working through all exercises in the Google Codelabs, and I suggest selecting Novice. Your settings for each codelab should look something like this:
You may use an existing Cloud Project or create a new Cloud Project for use during this codelab. Please note, if you use Qwiklabs your project will be reset after each codelab - for this reason I recommend using your own Cloud Project.
NOTE: This codelab might cost between $1 and $3 in compute resources.
We will use Google App Engine to serve user requests, perform backend processing, and to host our static resources.
Work through Google's Getting Started with App Engine (Python) codelab, then move on to STEP 1.
We will use Google Cloud Natural Language API to conduct sentiment analysis on entities we fetch from Hacker News. In this step, we will introduce you to the basics of the APIs.
Work through Google's Entity and Sentiment Analysis with the Natural Language API codelab, then move on to STEP 2.
NOTE: Do not forget to enable the Cloud Natural Language API. To do this, under API Manager, goto Library, then find Cloud Natural Language and click it. Click enable.
We will use Google Cloud SQL to store the results of our sentiment analysis.
Work through Google's Create a Managed MySQL database with Cloud SQL codelab, then move on to STEP 3.
NOTE: Select Second Generation when creating your instance.
NOTE: When creating your instance, be sure to set a root password.
NOTE: Do NOT delete your instance yet, we will use it in STEP 3.
In this step, we will build on the prior steps and integrate App Engine, SQL, and Natural Language API.
All steps are meant to be run within the Cloud Shell you used in the prior steps.
Clone the codelab repo - where you are reading this.
$ mkdir code && cd code
$ git clone https://github.com/RealKinetic/codelab.git
$ cd codelab
When deploying a Python app to App Engine, you should bundle your dependencies. We have included a helper to do this for you:
$ make install
You should also install the MySQL Client Library:
$ sudo apt-get install libmysqlclient-dev
This app uses Flask, a simple Python framework.
Open app.yaml, note that we map a static route to /
and that we use a
"catch-all" route (.*
) to handle all other requests.
Our catch-all is mapped to app
which is exposed from
src/handler/__init__.py
. Here, we map all of our endpoints to request
handlers. Take a moment and review these handlers.
Deploy your application to App Engine:
gcloud app deploy app.yaml
Then verify that you can access it by viewing http://<project-id>.appspot.com
in your browser. You should see the following:
You will need to write the payload for analyze entities in
src/api/natural_language.py
, the content is in the text
variable.
body = {
'document': {
'type': 'PLAIN_TEXT',
'content': text,
},
'encoding_type': encoding,
}
Configure the connection to Cloud SQL in src/config/envs/deployed.py
.
DSN = (
'mysql+mysqldb://USER_NAME:PASSWORD@/DATABASE_NAME?unix_socket=/cloudsql/'
'PROJECT_ID:REGION:DATABASE_NAME'
)
You can find the variables in the SQL tab of cloud console.
You can review the usage of Cloud SQL in src/api/highest_seen.py
. In this
project, we are using SQL Alchemy.
If you now click Get Rank
, a request to Hacker News will be made, then the NL
API used to populate a table within Cloud SQL. You can view the data in Cloud
SQL in the HackerNews Avg tab of the app.
If everything went correctly, you should see some results:
To debug your deployed app, use the log viewer:
If you followed the Google Cloud SQL codelab, you can skip this step.
You will need to create a MySQL Database named codelab
.
$ mysql -u root -p
> CREATE DATABASE codelab;