DEV Community

nomi3
nomi3

Posted on

Creating a Local Environment to Operate GCS Emulator from Flask

When creating an application that manipulates GCS (Google Cloud Storage) through Flask on Cloud Run, I wanted to use a GCS emulator in the local environment. This document describes how to set up such an environment.

Emulator to Use

Sample code

I created sample code in the following repository. By following the instructions in README.md, you can use the GCS emulator in a local environment to upload, download, and delete files.

Since you can start everything simply by cloning the repository and running make up, setup is straightforward.

Contents of docker-compose.yml

To use the GCS emulator in the Flask container, the STORAGE_EMULATOR_HOST environment variable is set:

services:
  app:
    environment:
      - STORAGE_EMULATOR_HOST=http://gcs:4443
Enter fullscreen mode Exit fullscreen mode

Configuring Flask’s StorageClient

The STORAGE_EMULATOR_HOST environment variable is checked to determine whether to use the emulator:

def get_storage_client():
    emulator_host = Config.STORAGE_EMULATOR_HOST

    if emulator_host:
        client = storage.Client(
            credentials=AnonymousCredentials(),
            project="test",
        )
    else:
        client = storage.Client()

    return client
Enter fullscreen mode Exit fullscreen mode

Conclusiuon

When building an application on Cloud Run that manipulates GCS through Flask, you might want to use a GCS emulator in your local environment. These are the setup steps. Note that in production you will not use the GCS emulator, so simply do not set the STORAGE_EMULATOR_HOST environment variable, specify your BUCKET_NAME, and grant the appropriate permissions to Cloud Run.

Top comments (0)