[PYTHON] GCP: Wiederholen Sie den Vorgang von Pub / Sub zu Cloud-Funktionen und von Cloud-Funktionen zu Pub / Sub

Unten ist das Architekturbild dieser Zeit.

image.png

Dinge vorzubereiten

・ Zwei Themen in Pub / Sub ┗ Nennen Sie sie "topic_1" und "topic_2".

・ Cloud Scheduler ┗ Setzen Sie das Thema auf "topic_1" und die Nutzdaten auf "hallo".

・ Zwei Funktionen mit Cloud-Funktionen ┗ Nennen Sie sie "function_1" und "function_2" Der Trigger von "function_1" setzt "topic_1" von Pub / Sub Der Trigger von "function_2" setzt "topic_2" von Pub / Sub

Inhalt von function_1

In der folgenden "event_message" wird eine Zeichenfolge wie die von Cloud Scheduler über topic_1 festgelegte Nutzlast "hello" gespeichert.

Wenn N Cloud Scheduler nur in der Nutzlast geändert werden und die anderen Einstellungen gleich sind, kann event_message in function_1 beurteilt und die nachfolgende Verarbeitung durchgeführt werden.

def main(event, context):
    event_message = base64.b64decode(event['data']).decode('utf-8')

Angenommen, Sie übergeben als nächstes eine Liste an function_2 Pub / Sub kann nur Text übergeben, daher müssen Sie ihn codieren

from google.cloud import pubsub_v1

PROJECT_ID = os.getenv('GCP_PROJECT')
client = pubsub_v1.PublisherClient()

topic_id = "topic_2" #Stellen Sie das Thema als nächstes ein

topic_path = client.topic_path(PROJECT_ID, topic_id)

pub_text = ["Apfel", "Gorilla", "Rap"]

data = pub_text.encode() #Hier kodieren
client.publish(topic_path, data=data) #Das ist ein Thema_2 zum Pub_Text wird gepusht

In der letzten Zeile oben wird '["Apfel", "Gorilla", "Trompete"]' an Topic_2 übergeben und Function_2 wird gezündet.

Inhalt von function_2

In der unten stehenden event_message ist '["apple", "gorilla", "trompet"]' enthalten. Bewerten Sie es also und geben Sie es in die Python-Liste zurück. Was ist die nachfolgende Verarbeitung?

def main(event, context):
    event_message = base64.b64decode(event['data']).decode('utf-8')
    fruit_lst = eval(event_message)

Versuchen Sie, function_2 parallel zu starten

Cloud-Funktionen können parallel gestartet werden, wie im folgenden offiziellen Dokument gezeigt. https://cloud.google.com/functions/quotas?hl=ja#scalability

Wenn Sie also function_1 in einer Schleife wie folgt in Pub / Sub veröffentlichen, erhält function_2 3 Früchte.

function_1.py


from google.cloud import pubsub_v1

PROJECT_ID = os.getenv('GCP_PROJECT')
client = pubsub_v1.PublisherClient()

topic_id = "topic_2"

topic_path = client.topic_path(PROJECT_ID, topic_id)

fruit_lst = ["Apfel", "Gorilla", "Rap"]

for fruit in fruit_lst:
    data = fruit.encode()
    client.publish(topic_path, data=data)

Verweise

https://cloud.google.com/solutions/streaming-data-from-cloud-storage-into-bigquery-using-cloud-functions?hl=ja https://cloud.google.com/functions/quotas?hl=ja#scalability

Beiseite

Wenn Sie die Liste auch codieren () und diktieren, sie an Pub / Sub übergeben und auf der Empfangsseite auswerten, wird sie wiederhergestellt. Dies war daher praktisch, wenn Sie regelmäßig mehrere Lichtprozesse ausführen möchten.

Recommended Posts

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: Link-Funktionen und Pub / Sub
Emulieren Sie GCP Cloud-Funktionen lokal
[GCP] Ausgeben von Cloud-Funktionsprotokollen an Cloud Logging (Stackdriver Logging) (Python)
SSH-Verbindung von Windows zu GCP
Änderungen an "Ausführen von Cloud Dataflow + Cloud Pub / Sub + Fluentd ..." mit SDK 2.1
Senden Sie eine Nachricht von IBM Cloud Functions an Slack in Python
Herstellen einer Verbindung zum Cloud Firestore über Google Cloud-Funktionen mit Python-Code
So aktivieren Sie, dass Python3 Jobs ausführt, wenn Jobs von GCP Cloud Composer an Dataflow gesendet werden
Summe von 1 bis 10
Senden Sie Protokolldaten vom Server an Splunk Cloud