[GCP] Ein Memorandum zum Ausführen eines Python-Programms mit Cloud-Funktionen

Ich habe versucht, Python mit Cloud-Funktionen auszuführen, und es ist tagelang geschmolzen Ich werde es verlassen, damit mein zukünftiges Selbst nicht mehr schmilzt.

Log

Sie können die Protokollausgabe auch durch Drucken aus der Cloud-Protokollierung überprüfen, wenn der Vorgang normal abgeschlossen ist. Wenn eine Ausnahme auftritt, werden beim Drucken in der Ausnahmeklausel keine Details in die Cloud-Protokollierung gedruckt, sodass nur die Informationen "Absturz" übrig bleiben. Damit gibt es keinen Hinweis, und ich habe keine Ahnung, welche Art von Fehler in welchem Prozess aufgetreten ist. Wenn Sie das Protokollierungsmodul verwenden, wird das Protokoll fest an der Stelle ausgegeben, an der Sie es ausgeben möchten, und das Symbol für jede Zeile der Cloud-Protokollierung ändert sich je nach Protokollstufe, sodass die Verwendung einfacher ist.

import logging
import traceback

def main():
    try:
        #wird bearbeitet
        logger.info("output by logger")
        print("output by print") #Ausgabe, wenn die Verarbeitung normal endet
    except:
        traceback.print_exc() #Wird nicht in die Cloud-Protokollierung ausgegeben
        logger.error("error by logger: ", exc_info=True)
        raise

Rund um die Authentifizierung mit anderen Diensten von GCP / Google

Mit dem ADC (https://cloud.google.com/docs/authentication/production?hl=ja) können Sie die Anmeldeinformationen mit "google.auth.default ()" abrufen. Abhängig vom zu authentifizierenden Dienst können Informationen zum Umfang der Anmeldeinformationen hinzugefügt und bei Bedarf Rollen für das Ausführungsdienstkonto festgelegt werden.

Speichern Sie bei der lokalen Entwicklung die Anmeldeinformationen in einer JSON-Datei und geben Sie einfach den Pfad der JSON-Datei in der Umgebungsvariablen "GOOGLE_APPLICATION_CREDENTIALS" an. "Google.auth.default ()" wird authentifiziert, sodass "Local" und "Cloud" Es ist nicht erforderlich, die Verarbeitung in Funktionen zu verzweigen.

import google.auth
from google.cloud import kms_v1
import gspread

def spreadsheet(url):
    credentials, _ = google.auth.default(scopes=['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'])
    gc = gspread.authorize(credentials)
    return gc.open_by_url(url)

def kms_client():
    credentials, _ = google.auth.default()
    return kms_v1.KeyManagementServiceClient(credentials=credentials)

Untersuchen Sie die Ursache für 400 Fehler bei fehlerhaften Anforderungen, wenn Sie einen neuen Fehler über die Cloud-Funktions-API erstellen

Es ist ein wenig abseits der Spitze des Python-Programms, aber ich bin süchtig danach, Funktionen mithilfe von Terraform für Cloud-Funktionen bereitzustellen, also lasse ich das auch.

Ich denke nicht, dass dies der Fall ist, wenn eine Funktion über die GCP-Konsole im Web erstellt wird, aber wenn ich sie anwende, wenn Terraform den Unterschied im Plan ohne Probleme zeigt.

400 Bad Request INVALID_ARGUMENT The request has errors

↑ Es wird nur eine Nachricht wie diese ausgegeben, und ich weiß nicht, welcher Artikel defekt ist.

Bei Terraform ändert das Hinzufügen von "TF_LOG = debug" zur Umgebungsvariablen nicht viel an den erhaltenen Informationen. Notieren Sie sich jedoch die von diesem TF_LOG = debug ausgegebenen Informationen zum Anforderungshauptteil.

In der Cloud-Funktionen API-Referenzseite (https://cloud.google.com/functions/docs/reference/rest/v1/projects.locations.functions/create?hl=ja) ** Probieren Sie diese API aus ** Wenn Sie den von TF_LOG = debug ausgegebenen Anfragetext eingeben und EXECUTE ausführen, werden der Feldname mit dem Fehler und die Details des Fehlers zusätzlich zu 400 Bad Request INVALID_ARGUMENT Die Anforderung hat Fehler an die Nachricht ausgegeben. Überlegen.

Vordefinierte Umgebungsvariablen

Da ich es jedes Mal mit print ausdrucke und überprüfe, lasse ich die Ausgabe unverändert als Memorandum.

environ({
  'PORT': '8080',
  'X_GOOGLE_WORKER_PORT': '8091',
  'NODE_ENV': 'production',
  'X_GOOGLE_ENTRY_POINT': 'entrypoint',
  'FUNCTION_TRIGGER_TYPE': 'HTTP_TRIGGER',
  'GCLOUD_PROJECT': 'project_id',
  'DEBIAN_FRONTEND': 'noninteractive',
  'X_GOOGLE_FUNCTION_MEMORY_MB': '256',
  'FUNCTION_TIMEOUT_SEC': '60',
  'SUPERVISOR_INTERNAL_PORT': '8081',
  'ENTRY_POINT': 'entrypoint',
  'X_GOOGLE_LOAD_ON_START': 'false',
  'X_GOOGLE_FUNCTION_REGION': 'asia-northeast1',
  'X_GOOGLE_FUNCTION_VERSION': '1',
  'WORKER_PORT': '8091',
  'VIRTUAL_ENV': '/env',
  'X_GOOGLE_GCP_PROJECT': 'project_id',
  'CODE_LOCATION': '/user_code',
  'PWD': '/user_code',
  'X_GOOGLE_CONTAINER_LOGGING_ENABLED': 'false',
  'FUNCTION_NAME': 'dummy_function',
  'X_GOOGLE_CODE_LOCATION': '/user_code',
  'FUNCTION_MEMORY_MB': '256',
  'X_GOOGLE_FUNCTION_IDENTITY': 'dummy_service_account@project_id.iam.gserviceaccount.com',
  'FUNCTION_IDENTITY': 'dummy_service_account@project_id.iam.gserviceaccount.com',
  'FUNCTION_REGION': 'asia-northeast1',
  'GCP_PROJECT': 'project_id',
  'X_GOOGLE_FUNCTION_NAME': 'dummy_function',
  'X_GOOGLE_SUPERVISOR_HOSTNAME': 'supervisor',
  'HOME': '/tmp',
  'SUPERVISOR_HOSTNAME': 'supervisor',
  'PATH': '/env/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
  'X_GOOGLE_GCLOUD_PROJECT': 'project_id',
  'X_GOOGLE_FUNCTION_TRIGGER_TYPE': 'HTTP_TRIGGER',
  'X_GOOGLE_SUPERVISOR_INTERNAL_PORT': '8081',
  'X_GOOGLE_FUNCTION_TIMEOUT_SEC': '60',
  'LC_CTYPE': 'C.UTF-8',
})

Zusammenfassung

Wenn nützliche Informationen in das Protokoll ausgegeben werden können, ist die Fehleruntersuchung einfacher. Die Authentifizierung wird durch die Rolleneinstellung des Dienstkontos unter Verwendung von "google.auth" genau gesteuert.

Ich habe nur das Gefühl, dass es noch einen Punkt der Harmonie gibt, aber ich habe das Gefühl, dass ich den Punkt verstanden habe.

Recommended Posts

[GCP] Ein Memorandum zum Ausführen eines Python-Programms mit Cloud-Funktionen
Beim Schreiben eines Programms in Python
Hinweise zur Verwendung der Tab-Vervollständigung beim interaktiven Ausführen von Python unter Windows
Erstellen Sie eine Python + OpenCV-Umgebung in Cloud9
[GCP] Verfahren zum Erstellen einer Webanwendung mit Cloud-Funktionen (Python + Flask)
Python-Variablenargument Ein Memorandum beim Erben einer definierten Klasse
Eine Geschichte über das Ausführen von Python auf PHP auf Heroku
Ein Memorandum zum Berühren von Python Flask mit Heroku
Traps beim Ausführen von ausführbaren Python Windows-Dateien
Ein Memorandum beim Schreiben von experimentellem Code ~ Anmelden in Python
Was ist in dieser Variablen (wenn das Python-Skript ausgeführt wird)?
Vom Kauf eines Computers bis zur Ausführung eines Programms auf Python
[Django] Memorandum, wenn Sie asynchron kommunizieren möchten [Python3]
Beim Ausführen eines Programms mit dem Azure SDK für Python wurde "ModuleNotFoundError: Kein Modul mit dem Namen" Azure "" angezeigt
Zusammenfassung der Punkte, die beim Schreiben eines Programms zu beachten sind, das unter Python 2.5 ausgeführt wird
Geben Sie Optionen an, wenn Sie Python ausführen
Memorandum über Korrelation [Python]
Ein Memorandum über den Python-Mock
[GCP] Ausgeben von Cloud-Funktionsprotokollen an Cloud Logging (Stackdriver Logging) (Python)
Wenn Sie einen UNIX-Befehl in Python ausführen möchten
Emulieren Sie GCP Cloud-Funktionen lokal
Erstellen Sie mit Python und Redis eine Rangliste für Spiele in der Alibaba-Cloud
Senden Sie eine Nachricht von IBM Cloud Functions an Slack in Python
Vorsichtsmaßnahmen beim Ausführen von Python unter EC2 über AWS Lambda (Befehl ausführen)
Spielen Sie mit GCP Free Frame ② ~ Luftstrom (auf Compute Engine), Cloud-Funktionen ~
Stellen Sie fest, ob beim Ausführen eines Python-Skripts eine Standardausgabe weitergeleitet wird
"Wertfehler: Handler'file_output_handler 'kann nicht konfiguriert werden" beim Starten eines Python-Programms
So aktualisieren Sie die Python-Version von Cloud Shell in GCP
Memorandum beim Ausführen von Python auf EC2 mit Apache
Alles vom Erstellen einer Python-Umgebung bis zur Ausführung unter Windows
Erstellen einer Python-Umgebung auf einem Mac
[Python] Verwalten Sie Funktionen in einer Liste
Erstellen einer Python-Umgebung unter Ubuntu
[Python] Ein Memorandum der schönen Suppe4
Erstellen Sie eine Python-Umgebung auf dem Mac (2017/4)
Memorandum über das Auswendiglernen rekursiver Funktionen
Führen Sie einen Linux-Server mit GCP aus
Erstellen Sie eine Python-Umgebung in Centos
Vorsichtsmaßnahmen beim Erstellen eines Python-Generators
Erstellen Sie eine Python3-Umgebung unter CentOS7
Ein Hinweis, wenn Sie systemd verwenden, um CentOS 7 dazu zu bringen, immer Python-Skripte auszuführen, denen nicht besonders bewusst war, dass sie als Daemon ausgeführt werden
Dinge, auf die Sie beim Erstellen einer Python-Umgebung auf einem Mac achten sollten
Übergeben Sie beim Ausführen einer Python-Shell von Electron mehrere Argumente, um Python auszuführen.
[Django] SQLite-Versionsfehler beim Ausführen von python manage.py in einer aws cloud9-Umgebung
Ein Memorandum, weil ich beim Versuch, MeCab mit Python zu verwenden, gestolpert bin
Erstellen Sie mit Cloud9 (jupyter miniconda python3) eine Lernumgebung für "Deep Learning von Grund auf neu".
Ein Memorandum, wenn Django auf dem Vermietungsserver von Sakura installiert ist (Standardplan)
Benachrichtigen Sie Slack, wenn der auf GCP ausgeführte maschinelle Lernprozess abgeschlossen ist
Migrieren Sie Django-Anwendungen, die unter Python 2.7 ausgeführt werden, auf Python 3.5
Ich habe ein Pay-Management-Programm in Python erstellt!
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
Erstellen Sie eine Python-Umgebung unter MacOS (Catallina)
Erstellen Sie eine Python-Umgebung auf Ihrem Mac
Ein Memo mit Python2.7 und Python3 in CentOS
Kartenmietinformationen auf einer Karte mit Python