Deploy your Voice App to Google Cloud

by Kaan Kilic on Jan 24, 2019

Deploy your Alexa Skill and Google Action to Google Cloud

Learn how to host your Alexa Skills and Google Actions on Google Cloud with Cloud Functions and Firebase (Google Cloud Firestore) as your database.

Introduction

Google Cloud is the cloud computing service by Google. It provides a variety of cloud services, including Cloud Functions (a serverless compute service) and Firestore (the NoQSL database service by Firebase).

In this tutorial, you will go through the steps needed to host your Alexa Skills and Google Actions on Google Cloud by using Cloud Functions for your code, and Firestore for storing user specific data.

Google Cloud Functions

Find the Docs here: Hosting: Google Cloud Functions.

In this section, you will go through the necessary steps to host your voice app's code on Google Cloud Functions:

Project Configuration to Host on Google Cloud

The only change you have to make to your project to be able to host on Google Cloud Functions, will be made inside your index.js and package.json file. Instead of using Lambda, you have to use GoogleCloudFunction.

For that, first replace Lambda with GoogleCloudFunction at the require statement at the top of the file:

After that, replace the code snipped at the bottom, where it says AWS Lambda with the following piece:

Inside your package.json file, you have to change value of the main option, which specifies the entry point to your program, from src/index.js to index.js:

That's it.

Create Google Cloud Function

First of all, you have to create a Cloud Function. For that, select Cloud Functions at the navigation menu of the Google Cloud Console:

Google Cloud Console Landing Page

You will be prompted to enable the Cloud Functions API as well as to create a new function, which will route you to the following form:

Google Cloud Functions New Function Form

The trigger and memory allocated settings can be left untouched, but I would recommend to change the Runtime to Node.js 8 to allow the use of async/await.

Also, instead of using the Inline editor, select the ZIP upload option. You can generate a bundle.zip file to upload by using the following command in your Jovo project:

You also need to specify a Stage bucket, which you have to create, if you don't have one already, that will be used to store your code:

Google Cloud Functions Select Bucket

Google Cloud Functions Create New Bucket

Last but not least, change the Function to execute to handler.

The filled form should look like this:

Google Cloud Functions New Function Form Filled

Press Create and lean back, as this will take a minute or two.

After your function was created, you will be redirected to the landing page of Google Cloud Functions. Now select the toogle on the left of your function, and select ADD MEMBER:

Google Cloud Functions Select Function

After that, add the allUsers member with the Cloud Functions Invoker role:

Google Cloud Functions allUsers Permission

Now, click on your function's name to get to its details page:

Google Cloud Functions Landing Page

On the landing page of your function, you can find the Trigger section, where you will be able to find the URL, that you can use as the endpoint for each platform your voice app supports:

Google Cloud Functions Function Landing Page

Google Cloud Functions Function Trigger

Google Firestore

Find the Docs here: Database: Firestore.

Now that you have your code running on Google Cloud Functions, you can't rely on the default database integration (FileDB) anymore.

Instead, we are going to use Google Cloud Firestore, the NoSQL database by Firebase. An alternative could also be Google Cloud Datastore, which is also supported by Jovo. You can find the Docs for Google Cloud Datastore here.

Learn how to use Firestore to store user data in the following steps.

Create Firestore Database

Open up the Firebase Console and select Add project:

Google Firebase Landing Page

Select the project you created earlier on and press Continue:

Google Firebase Add Project

After your project was added, select Database to be routed to Firestore:

Google Firebase Project Landing Page

On there, select Create database:

Google Firebase Firestore Landing Page

Stay with the locked mode option and press Enable:

Google Firebase Firestore Security Rules

After that, your database should be created.

To access the database, you have to authenticate yourself, for which you need add a service account. To create one, go to your project settings:

Google Firebase Firestore Database

On there, switch to the Service Accounts tab:

Google Firebase Project Settings

At the bottom of the page, you will find the Generate new private key button, which will download a JSON file that you will need later on:

Google Firebase Service Accounts

For now you're done here, but eep the tab open, since you will need it in a minute.

Project Configuration to use Firestore

To use Firestore in your project, you will need the jovo-db-firestore plugin:

After that go to your app.js file and import as well as enable it:

Last but not least, you have to configure the plugin. For that you will need the database url, which you can find on the tab you left open, as well as the JSON file you downloaded a minute ago:

Google Firebase Database URL

Move the JSON file inside your project's src folder and add the following to your config.js file:

That's it. Your project will now use Firestore as its database.


Kaan Kilic

Technical Content Marketing Associate at Jovo

Comments and Questions

Any specific questions? Just drop them below or join the Jovo Community Forum.

Join Our Newsletter

Be the first to get our free tutorials, courses, and other resources for voice app developers.