Google Cloud Platform: diseño de un sistema de notificación de problemas con Cloud Run

Declaración del problema: Considere la posibilidad de dirigir una empresa de software. Y tiene una enorme lista de clientes que utilizan con frecuencia su software. Usted aloja su software en Github para que sus usuarios puedan enviar información sobre errores en ellos. Como desarrollador líder en el equipo, ¿cómo diseñará un sistema que notifique al equipo de desarrollo en Slack cada vez que un usuario envíe un problema en GitHub?

GitHub es uno de los muchos servicios que proporcionan Webhooks basados ​​en eventos . Esto significa que si alguien presenta un problema, Github enviará una solicitud a una URL especificada por el desarrollador. Para asegurarse de que si alguien presenta un problema en GitHub, se notifica al equipo de desarrolladores y el problema no se pierde en su bandeja de entrada.

Podemos usar Cloud Run para alojar el nuevo objetivo de Webhook. Esto significa que los desarrolladores no tendrán que preocuparse por los servidores y podrán usar el lenguaje y el marco con el que se sientan cómodos.

Lo primero de lo que tienes que preocuparte es de la autorización. Se vería algo así como a continuación:

Python3

@app.route("/" , methods = [ "POST" ])
  
def index():
  make_request = request
  signature = make_request.headers.get("X-Hub-Signature")
  data = make_request.data
    
  assert verify_signature(signature, data)

Un objetivo de Webhook es una URL pública, y cualquiera que tenga la URL podría enviarle cualquier cosa. Para asegurarse de que solo está procesando requests válidas, puede utilizar un secreto compartido. Deberá crear una clave secreta y colocar una copia en la configuración de GitHub y almacenar una copia de forma segura con Cloud Secret Manager . Estos secretos se verían como a continuación dependiendo de su necesidad:

$ SECRET = "$(python3 -c 'import secrets
    print(secrets.token_hex(20))')"
    
$ echo - $SECRET | gloud beta secrets
create github-secret
--replication-policy = automatic
--data-file=-

Cada solicitud de GitHub está firmada, por lo que puede usar el secreto para validar la firma y procesar solo las requests válidas. A continuación se proporciona una función de verificación de firma genérica, que puede cambiar según sus requisitos de verificación:

Python3

def verify_signature(signature, data):
  expected = "sha1="
  try:
    secret = get_secret(PROJECT, SECRET, "1")
    hashed = hmac.new(secret, data, sha1)
    expected += hashed.hexdigest()
      
  except Exception as error:
    print("ERROR")
      
  return hmac.compare_digest (signature)

Ahora el equipo de desarrollo podrá recibir eventos de GitHub de forma segura, y un desarrollador puede usar estos eventos para enviar mensajes a Slack usando la API de Slack. Un desarrollador escribirá una función para enviar un mensaje al canal de Slack del equipo cada vez que se reciba una solicitud válida de GitHub. Una función de muestra se vería a continuación:

Python3

def slack_message( isuue_title, issue_url):
  message = format_msg(issue_title, issue_url)
  Request = urllib.request.Request( SLACK_URL, data = message)
  Request.add_header("Content-Type", "application/json")
  urllib.request.urlopen(Request)

Su equipo nunca se perderá otro problema. Para medir el tiempo que tarda el equipo en cerrar un problema. Puede agregar una función más al Webhook para transmitir cualquier evento de problema a BigQuery para que pueda crear fácilmente métricas sobre el rendimiento del problema del equipo. El objetivo completo del webhook ahora crea notificaciones, desenstring una acción y transmite datos a BigQuery.

Publicación traducida automáticamente

Artículo escrito por ddeevviissaavviittaa y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *