Questa guida mostra come ospitare una destinazione webhook in un servizio Cloud Run for Anthos.
Cloud Functions e Cloud Run for Anthos
Cloud Functions e Cloud Run for Anthos offrono entrambi soluzioni ottimali per l'hosting dei target webhook. In genere, Cloud Functions è veloce da configurare, utile per la prototipazione e ideale per i flussi di lavoro a volume inferiore. Cloud Run for Anthos offre maggiore flessibilità ed è in grado di gestire volumi più grandi contemporaneamente.
Utilizza Cloud Run for Anthos se:
- Stai utilizzando linguaggi o runtime non supportati in Cloud Functions
- Vuoi più timeout delle richieste (fino a 15 minuti)
- Prevedi un volume elevato e hai bisogno di contemporaneità (80 o più richieste in parallelo per istanza container)
Creazione di una destinazione webhook in Cloud Run for Anthos
Con Cloud Run for Anthos puoi definire una destinazione webhook in qualsiasi linguaggio
di tua scelta. Devi solo creare un endpoint HTTP in grado di accettare i dati.
Generalmente, questa operazione viene eseguita con un elemento POST
, ad esempio:
@app.route('/', methods=['POST'])
def index():
data = request.get_json()
Nell'esempio precedente, la pagina di indice dell'URL è configurata in modo da accettare solo
POST
richieste e prevede che i dati vengano pubblicati tramite un payload JSON.
Integrazione con il provider webhook
La maggior parte dei servizi che forniscono callback HTTP richiede la verifica della proprietà dell'URL. A tale scopo viene inviato un token, un messaggio o un secret e viene inviata una risposta valida. Devi ottenere questi requisiti dal fornitore di servizi. Utilizzando lo stesso esempio riportato sopra, potrebbe avere il seguente aspetto:
def index():
data = request.get_json()
return data['challenge']
Dopo che il fornitore avrà verificato la tua proprietà, dovrai aggiungere l'autorizzazione anche da parte tua.
Autorizzazione delle richieste
Una destinazione webhook è un URL aperto e pubblico. La maggior parte dei servizi fornisce un token o un secret per garantire che le richieste in entrata provengano da servizi autorizzati. Poiché l'URL è pubblico, non puoi impedire tentativi dannosi di inviare dati al target webhook. Tuttavia, l'utilizzo di token o secret garantisce che tu elabori solo i dati provenienti da origini autorizzate.
Per verificare la richiesta, devi archiviare la tua copia del secret come variabile di ambiente o utilizzando un qualche tipo di sistema di gestione delle chiavi. Ogni richiesta deve avere un secret o un token nelle intestazioni della richiesta o nel payload JSON e devi verificarlo per assicurarti che l'origine sia valida.
def index():
request_secret = request.headers['Secret']
if request_secret != os.environ['SECRET']:
return ('Unauthorized', 401)
Se il provider webhook non supporta un meccanismo di autenticazione segreto o di altro tipo, chiunque abbia l'URL della destinazione webhook potrà inviare messaggi. In questo caso, l'implementazione del webhook deve essere sicura per essere esposta a Internet.
Risposta alle richieste
La maggior parte dei servizi richiede la risposta a una richiesta entro un determinato periodo di tempo, come specificato dal servizio. Alcuni webhook dispongono di metodi di ripetizione incorporati se è presente una risposta di errore, ad esempio un codice di stato HTTP 4xx o 5xx. Di conseguenza, devi restituire un codice di stato corretto (2xx) per informare il servizio che l'evento è stato elaborato correttamente.
def index():
data = request.get_json()
return ('', 200)
Timeout
Sia Cloud Run for Anthos sia il provider webhook hanno timeout. Alla tua applicazione verrà applicato il più breve dei due. Se l'elaborazione dei dati supera il tempo allocato da Cloud Run for Anthos o dal provider webhook, devi utilizzare un prodotto che ti consenta di completare l'elaborazione in modo asincrono, ad esempio Pub/Sub o Cloud Tasks. Questi prodotti consentono di trasmettere rapidamente i dati, restituire immediatamente una risposta di successo al provider webhook e continuare l'elaborazione senza il problema di timeout. Queste sono anche buone opzioni per la gestione di errori e nuovi tentativi.
Pattern webhook comuni
Tipo | Esempi |
---|---|
Inoltro dei dati | Invio di una notifica tramite Firebase Cloud Messaging ogni volta che viene richiamato il webhook. |
Archiviazione dei dati | Archiviazione dei dati in BigQuery per l'analisi successiva. |
Azioni di attivazione | Evasione delle azioni in Dialogflow, pubblicazione delle risposte su Twitter o invio al tuo ambiente temporaneo quando viene eseguito il commit del nuovo codice in GitHub. |
Passaggi successivi
- Scopri di più sui webhook (trigger di HTTP) in Cloud Functions
- Configura le notifiche di webhook nella suite operativa di Google Cloud
- Invio di messaggi Pub/Sub a un webhook tramite sottoscrizioni push
- Esegui le azioni su Dialogflow con i webhook