How to serve Google Cloud Storage images?

1.3k views Asked by At

I want google.appengine.ext.blobstore and google.appengine.api.images to work outside of App Engine. Do these modules require App Engine in order to work? I want to create public but not guessable URLs of my images on Google Cloud Storage and serve them via Django.

I read that this is done with google.appengine.ext.blobstore.create_gs_key() and google.appengine.api.images.get_serving_url(). This is what I have so far:

from google.appengine.api import images
from google.appengine.ext import blobstore

bucketname = 'mybucket'

gcs_object_name = '/gs/mybucket/vincent-van-gogh/the-starry-night.jpg'
blob_key = blobstore.create_gs_key(gcs_object_name)
image_url = images.get_serving_url(blob_key)

And image_url is supposed to be a public but not guessable URL of my image. If I run this code, the error is

AssertionError: No api proxy found for service "blobstore"

This suggests blobstore needs a proxy, aka App Engine, in order to work its magic. Can App Engine modules work outside of App Engine? The docs say the above is a powerful way to serve images because I can generate a URL for each image and also resize the image dynamically.

Will this strategy work or is there a better way to serve images from Google Cloud Storage with Django?

1

There are 1 answers

0
Andrew J On BEST ANSWER

The blobstore and images APIs are available only within the App Engine runtime environment. To run them inside compute engine you can:

  • Run them inside Managed VMs (the GAE runtime environment on GCE)

  • Run them on your own infrastructure or GCE using a GAE API emulator (such as AppScale)

  • Use public APIs (such as Google Cloud Storage) instead

Some App Engine services (such as Datastore) now also expose public APIs that you can use from GCE.