Archive for category Google App Engine (GAE)

How to use https on Google App Engine for all requests for custom domain

Before use the settings below, make sure that you uploaded and assigned appropriate SSL certificate to your app project.

Forcing GAE to use https is very easy, just need to mention the option “secure” with value “always” in “app.yaml” file (other options are “optional” for using both http & https (default behavior) and “never” for using http only), the example below in for golang app, the same approach is used for other languages.

application: your-app-here
version: 1
runtime: go
api_version: go1

- url: /.*
  script: _go_app
  secure: always

, , , ,

Leave a comment

Setting SSL certificate for Google App Engine

Help on the topic can be found here: https://cloud.google.com/appengine/docs/python/console/using-custom-domains-and-ssl

Telling long story shortly:

1. Generate key & signing request with the command

openssl req -nodes -newkey rsa:2048 -keyout myserver.key -out server.csr

2. Send “server.csr” file to your favorite certificate issuer and receive .crt files

3. Convert your private key into the format google requires:

openssl rsa -in myserver.key -out private.key.pem

4. Concatenate all .crt file into one

cat www_example_com.crt ASecureServerCA.crt ATrustCA.crt ATrustExternal.crt > public.crt

5. Upload public.crt & private.key.pem in google cloud console

6. Map your certificate with the website and enjoy.

, , ,

1 Comment

How to debug if you use goapp instead of go

I recently switched my editor for GOLANG from Sublime Text to Visual Studio Code using it together with plugin vscode-go. It is working perfectly and now there is much more pleasant to code in this IDE using GO. But I still missed one feature: debugger. vscode-go supports  visual debugging using delve but the issue is that I’m developing with go both for google application engine (GAE) and creating also usual go programs, dalve refused to work when I was trying to debug usual GO programs using GOAPP (I have just a symlink from ‘go’ to ‘goapp’ in SDK, no separate go is installed) giving me the following error:

couldn't detect GO version

Looks like the parser of dalve couldn’t detect version of GO because google adds to it additional information and the output of the command ‘go version’ looks like

go1.6 (appengine-1.9.35)

instead of the standard

go1.6

So, I decided that it can be fixed easily and found this check in the file go_version.go

Next thing I did, I just added the code below  in the check to remove this part “(appengine-1.9.35)” from version information, the change should go in line 27 just after ‘if strings.HasPrefix(ver, go) {‘ in the file go_version.go

    indexStart := strings.Index(ver, "(")
    if indexStart > 0 {
        indexEnd := strings.Index(ver, ")")
        if indexEnd > indexStart {
            ver = ver[:indexStart] + ver[indexEnd+1:]
            ver = strings.Trim(ver, " ")
        }
    }

Then I compiled/installed dalve  again and my debugger inside of Visual Studio Code started to work!

Enjoy!

, , , , , ,

Leave a comment

Setup Sublime Text to work with golang and Google App Engine (mac)

If you want to create applications with GO, deploy them to google app engine and use Sublime Text as your IDE then this step-by-step tutorial is for you (tutorial is  for Mac but it can be used for other platforms)

Step 0:

Download and install golang SDK from Google:
https://cloud.google.com/appengine/downloads#Google_App_Engine_SDK_for_Go

Unpack it somewhere (I usually use the folder “$HOME/SDKs”)

Step 1:

Install Sublime Text 3, you can find it here:
https://www.sublimetext.com

Step 2:

Install package control for Sublime Text, find all relevant information about installation process here: https://packagecontrol.io/installation

Step 3:

Install GoSublime package: https://github.com/DisposaBoy/GoSublime

Press cmd+shift+p, type ‘Package Control: Install Package’ or select it from the list, then type GoSublime and install the package

Step 4:

Setup  variables GOROOT & GOPATH in your environment (put the information below into .bash_profile on Mac/Linux)

Type in command line

cd ~
open .bash_profile -a "Sublime Text"

And add following lines to the end of the file

# Change the variables below to the path where you installed go_appengine
export GOSDK=/Users/user/SDKs/go_appengine
export GOROOT=$GOSDK/goroot
export GOPATH=$GOSDK/gopath
export PATH=$GOSDK:$GOROOT/bin:$PATH

Step 5:

Go to $GOROOT/bin & $GOROOT/pkg folders and execute the a commands below to create appropriate symlinks (GoSublime does not know anything about ‘goapp’, it knows only about ‘go’, we should simulate it)

cd $GOROOT/bin
ln -s goapp go
cd $GOROOT/pkg
ln -s darwin_amd64_appengine darwin_amd64

Step 6:

Create your first go app for GAE: create folder somewhere and create there 2 files, hello.go with the following content

package hello

import (
    "fmt"
    "net/http"
)

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello, world!")
}

and app.yaml with the following content (change gae-app-name-hello to real gae ID before deploying!)

application: gae-app-name
version: 1
runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app

If you did everything correctly then your Sublime Text should have code completion and console to run go commands. Press in Sublime Text cmd+9 and type ‘build’ in the console, it should compile and build your app. If build is successful then go to terminal and type in the app folder ‘goapp serve’, the app will run locally, you can check it with your web browser on the link http://localhost:8080

Step 7:

Deploy your app using command ‘goapp deploy’ in your app folder (do not forget to perform all the prerequisites to setup app engine, check this link for more info: https://cloud.google.com/appengine/docs/go/gettingstarted/uploading)

Enjoy!

, , , , , , ,

Leave a comment

Allow google app engine project to access storage bucket of the other project

  1. Go to Google Developer console and open the project where you want to have an access to storage bucket of another project
  2. Open menu “Permissions” and go to the tab “Service accounts”
  3. Copy the account ID marked as “App Engine default service account” (should be something like your_app_id@appspot.gserviceaccount.com)
  4. Switch in the console to the project with storage bucket
  5. Go to the menu “Storage” and call the menu on the bucket you want to share (3 dots on the right side) and select “Edit bucket permissions”
  6. Add new item with “User” as entity putting there the copied above account ID, select appropriate permission (read, write, owner)

That’s it.

, , , , ,

Leave a comment