[PYTHON] GCP: répétez de Pub / Sub vers Cloud Functions et de Cloud Functions vers Pub / Sub

Ci-dessous, l'image de l'architecture de cette époque.

image.png

Choses à préparer

・ Deux sujets dans Pub / Sub ┗ Nommez-les "topic_1" et "topic_2"

・ Cloud Scheduler ┗ Réglez le sujet sur "topic_1" et la charge utile sur "bonjour"

・ Deux fonctions avec des fonctions cloud ┗ Nommez-les "function_1" et "function_2" Le déclencheur de "function_1" définit "topic_1" de Pub / Sub Le déclencheur de "function_2" définit "topic_2" de Pub / Sub

Contenu de la fonction_1

Dans le message "event_message" suivant, une chaîne de caractères telle que la charge utile "hello" définie par Cloud Scheduler via topic_1 est stockée.

Si N Cloud Schedulers ne sont modifiés que dans la charge utile et que les autres paramètres sont identiques, event_message peut être évalué dans function_1 et le traitement ultérieur peut être effectué.

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

Ensuite, supposons que vous passiez une liste à function_2 Pub / Sub ne peut transmettre que du texte, vous devez donc l'encoder

from google.cloud import pubsub_v1

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

topic_id = "topic_2" #Définissez le sujet à suivre

topic_path = client.topic_path(PROJECT_ID, topic_id)

pub_text = ["pomme", "gorille", "rap"]

data = pub_text.encode() #Encodez ici
client.publish(topic_path, data=data) #C'est un sujet_2 au pub_le texte est poussé

Dans la dernière ligne ci-dessus, '["apple", "gorilla", "trumpet"]' est passé à topic_2 et function_2 est allumé.

Contenu de function_2

Dans l'événement_message ci-dessous, '["apple", "gorilla", "trumpet"]' est inclus, alors évaluez-le dans la liste python. Quel est le traitement ultérieur?

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

Essayez de démarrer function_2 en parallèle

Cloud Functions peut être démarré en parallèle comme indiqué dans le document officiel ci-dessous. https://cloud.google.com/functions/quotas?hl=ja#scalability

Par conséquent, si vous publiez function_1 dans Pub / Sub en boucle comme suit, function_2 obtiendra 3 fruits.

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 = ["pomme", "gorille", "rap"]

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

Les références

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

De côté

Si vous encodez également () la liste et le dict, passez-les à Pub / Sub et évaluez-les du côté de la réception, ils seront restaurés, donc c'était pratique lorsque vous souhaitiez effectuer plusieurs processus légers sur une base régulière.

Recommended Posts

GCP: répétez de Pub / Sub vers Cloud Functions et de Cloud Functions vers Pub / Sub
Comment appeler l'API Cloud à partir de GCP Cloud Functions
GCP: fonctions de lien et Pub / Sub
Émulez les fonctions GCP Cloud localement
[GCP] Comment générer des journaux Cloud Functions vers Cloud Logging (Stackdriver Logging) (Python)
Connexion SSH de Windows à GCP
Modifications pour exécuter "Utilisation de Cloud Dataflow + Cloud Pub / Sub + Fluentd ..." avec le SDK 2.1
Publier un message d'IBM Cloud Functions sur Slack en Python
Comment se connecter à Cloud Firestore à partir de Google Cloud Functions avec du code Python
Comment activer python3 pour exécuter des tâches lors de l'envoi de tâches de GCP Cloud Composer vers Dataflow
Somme de 1 à 10
Envoyer les données du journal du serveur vers Splunk Cloud