[PYTHON] Emulieren Sie GCP Cloud-Funktionen lokal

Beim Erstellen eines Backends auf der Google Cloud Platform dauert die Bereitstellung etwa eine Minute. Daher ist es problemlos möglich, eine Umgebung zu erstellen, die während der Entwicklung lokal emuliert wird. So emulieren Sie Cloud-Funktionen in einer Python-Umgebung.

Fazit

Erstellen Sie eine Funktion namens Hallo in main.py und fügen Sie sie ein

main.py


def hello(request):
    request_json = request.get_json()
    if request.args and 'message' in request.args:
        return request.args.get('message')+'get'
    elif request_json and 'message' in request_json:
        return request_json['message']+'post'
    else:
        return f'Hello Worlds!'

Geben Sie in diesen Ordner das unten stehende Terminal ein.

terminal.


functions-framework --target=hello

Bei der Angabe des Ports ist dies wie folgt.

terminal.


functions-framework --target=hello  --port=8081

Curl-Befehl

Dies ist ein Curl-Befehl zum Debuggen.

get.Kommunikation


curl  -X GET "localhost:8081/?message=Hi,get"

post.Kommunikation


curl -X POST -H "Content-Type: application/json" -d '{"message":"hi,post"}' localhost:8081/

Informationen zu den Cors-Einstellungen

main.py


def hello(request):
    request_json = request.get_json()
    headers = {
        'Access-Control-Allow-Origin': '*',
    }
    """
    headers = {
        'Access-Control-Allow-Origin': 'https://example.com',
    }
    """
    if request.args and 'message' in request.args:
        return (request.args.get('message')+'get', 200, headers)
    elif request_json and 'message' in request_json:
        return (request_json['message']+'post', 200, headers)
    else:
        return (f'Hello Worlds!', 200, headers)

Deployment

Wenn alles gut geht, stellen Sie es auf GCP bereit.

terminal.


 gcloud functions deploy hello \
--runtime python37 --trigger-http --allow-unauthenticated

https://cloud.google.com/functions/docs/quickstart

offiziell

https://github.com/GoogleCloudPlatform/functions-framework-python

Anwendungsbeispiel

In der Realität liegt der Rückgabewert häufig im JSON-Format vor, so dass dies der Fall ist.

main.py


import json

def hello(request):
    request_json = request.get_json()
    headers = {
        'Access-Control-Allow-Origin': 'http://localhost:8080',
    }
    """
    headers = {
        'Access-Control-Allow-Origin': 'https://example.com',
    }
    """
    print('called')

    if request.args and 'message' in request.args:
        input = request.args.get('message')
        rtrn = {'output':'hi %s(get)'%(input)}
        return (json.dumps(rtrn), 200, headers)
    elif request_json and 'message' in request_json:
        input = request_json['message']
        rtrn = {'output':'hi %s(post)'%(input)}
        return (json.dumps(rtrn), 200, headers)
    else:
        rtrn = {'output':'hi (no args)'}
        return (json.dumps(rtrn), 200, headers)

Für nicht standardmäßige Module müssen Sie die Datei request.txt erstellen. In diesem Fall benötigen Sie sie jedoch nicht, da es sich nur um json handelt.

Recommended Posts

Emulieren Sie GCP Cloud-Funktionen lokal
GCP: Wiederholen Sie den Vorgang von Pub / Sub zu Cloud-Funktionen und von Cloud-Funktionen zu Pub / Sub
So rufen Sie die Cloud-API über GCP-Cloud-Funktionen auf
[GCP] Ein Memorandum zum Ausführen eines Python-Programms mit Cloud-Funktionen
[GCP] Ausgeben von Cloud-Funktionsprotokollen an Cloud Logging (Stackdriver Logging) (Python)
Spielen Sie mit GCP Free Frame ② ~ Luftstrom (auf Compute Engine), Cloud-Funktionen ~
GCP: Link-Funktionen und Pub / Sub
[GCP] Verfahren zum Erstellen einer Webanwendung mit Cloud-Funktionen (Python + Flask)