
{"id":7848,"date":"2024-01-19T13:19:58","date_gmt":"2024-01-19T13:19:58","guid":{"rendered":"https:\/\/rax-stg-wp-aws.com\/blogs\/take-github-webhooks-event-processing-to-the-next-level\/"},"modified":"2026-11-03T19:29:06","modified_gmt":"2026-11-03T19:29:06","slug":"take-github-webhooks-event-processing-to-the-next-level","status":"publish","type":"blogs","link":"https:\/\/www.rackspace.com\/de\/blogs\/take-github-webhooks-event-processing-to-the-next-level\/","title":{"rendered":"Take GitHub Webhooks Event Processing to the Next Level"},"content":{"rendered":"<p><strong>Introduction<\/strong><\/p>\n<p class=\"MsoNormal\">GitHub Actions are an integral part of many CI\/CD workflows. They are amazing and can automate many processes providing a consistent and repeatable&nbsp;experience for your DevOps teams. But GitHub Actions (GHAs) are not perfect and have limitations that may not align with your team\u2019s needs. One such limitation is scaling actions across multiple repositories and GitHub organizations. Performing actions specific to an individual repo is common and can easily be handled with built-in or custom action runners. But when you have a desire to perform actions across many repositories or organizations there is another GitHub feature that should be considered.<\/p>\n<p class=\"MsoNormal\"><strong>The power of organization webhooks<\/strong><\/p>\n<p class=\"MsoNormal\">Organization webhooks are extremely powerful and flexible. You can subscribe to many events and send event payloads to a specific URL to be processed. This allows for webhooks to be leveraged in many common situations, such as triggering external processes, sending notifications and integrating with third-party platforms to name just a few. The possibilities are endless, and we quickly realized leveraging webhooks was crucial to handling common activities across multiple GitHub organizations. To learn more about GitHub webhooks, see the official documentation located <a href=\"https:\/\/docs.github.com\/en\/webhooks\/about-webhooks\">here<\/a>.<\/p>\n<p class=\"MsoNormal\"><strong>Solution Overview<\/strong><\/p>\n<p class=\"MsoNormal\">One of the key tenets of a DevOps mindset is the freedom to experiment and building a GitHub event processing framework, based on webhooks, was vital for our team. The framework described below was built on Amazon Web Services (AWS) and leverages the following services:<\/p>\n<ul>\n<li>Elastic Load Balancing<\/li>\n<li>AWS Lambda<\/li>\n<li>Amazon EventBridge<\/li>\n<\/ul>\n<p class=\"MsoNormal\">The basic model is a producer\/consumer design with a consumer of the GitHub webhook event validating and processing the request and then publishing the event to an Amazon EventBridge event bus for consumption.<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/blog_article_images\/26515-body-Figure1.png\" alt=\"Figure 1 webhooks\" \/><\/p>\n<p class=\"MsoNormal\"><em>Figure 1. Producer Architecture<\/em><\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/blog_technical_images\/26515-body-Figure2-1-.png\" alt=\"Fifure 2 Consumer Architecture\" \/><\/p>\n<p class=\"MsoNormal\"><em>Figure 2. Consumer Architecture<\/em><\/p>\n<p class=\"MsoNormal\">It should be noted this is not the only solution we considered, but it did meet our needs the best. Depending on your requirements, AWS Lambda Public Endpoint or Amazon API Gateway could also be considered instead of an application load balancer to handle events.<\/p>\n<p class=\"MsoNormal\"><strong>Design considerations<\/strong><\/p>\n<p class=\"MsoNormal\">Decoupling the webhook processor from the event handler was a key design choice to safeguard the external facing components from engineers developing custom event handlers. Further separation can be achieved by utilizing cross-account access with Amazon EventBridge notifications. You can read more about this concept <a href=\"https:\/\/aws.amazon.com\/blogs\/compute\/simplifying-cross-account-access-with-amazon-eventbridge-resource-policies\/\">here<\/a>. The application load balancer\u2019s security group only allows connections from GitHub\u2019s address ranges, checks the request header to ensure the request matches our expectations, and then uses path-based routing to send the payload to the appropriate AWS Lambda-based validation handler. The validation handler then performs payload checksum validation to confirm the request legitimately came from our configured webhooks via a shared secret key. After validation is completed, the lambda then places the event onto the EventBridge event bus for consumers to use with their solutions.<\/p>\n<p class=\"MsoNormal\">This solution is both extensible and scalable, allowing thousands of repositories across multiple GitHub organizations to easily have common features and capabilities. The possibilities are endless, but here are some ideas:<\/p>\n<ul>\n<li>Automated notification mechanisms for GitHub releases, pull requests, issues and discussions.<\/li>\n<li>Activity response and automation, such as when a label is added to an issue.<\/li>\n<li>Integration with third-party systems and workflows.<\/li>\n<li>Automated code review and analysis of pull requests.<\/li>\n<li>Collecting contribution metrics across your teams.<\/li>\n<\/ul>\n<p class=\"MsoNormal text-align-center\">\n<\/p>\n<p class=\"MsoNormal\"><strong>Conclusion<\/strong><\/p>\n<p class=\"MsoNormal\">If you have not given GitHub Organization webhooks a serious look then you may be missing an immensely powerful feature that will give your DevOps team the flexibility to create endless custom automations, taking your internal workflows to the next level. Creating an event processing framework like how this document outlined will enable your team to experiment safely and securely so they can focus on building impactful, cloud-native solutions<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Explore the strategic use of GitHub actions and organization webhooks on an AWS-based framework for effective management and automation of CI\/CD processes.<\/p>\n","protected":false},"author":2,"featured_media":7850,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","format":"standard","meta":{"content-type":"","nid":"26515","content_type":"blog","created_by":"10130","authored_on":"2024-01-19T13:19:58+00:00","field_article_industries":"","tag_category":"Technical","field_blog_author_text":"by Michael Bordash, Principal Cloud Practice Architect, Rackspace Technology and Jake Skipper, Cloud Practice Architect, Rackspace Technology","seo_description":"Learn how GitHub Actions integrate into CI\/CD workflows and discover the power of organization webhooks for scaling across repositories. Read our bog post.","field_featured_image":"","insights_image":"\/wp-content\/uploads\/2026\/blog_technical_images\/26515-insights_image-devops-technical-blog-1-insights.jpg","field_partners":"","rxt_platforms":"Cloud, Amazon Web Services (AWS)","product":"","publisheddate":"2024-01-19T13:19:58","rxt_solutions":"Cloud Adoption & Migration, Cloud Management & Operations, Cloud Optimization, Rackspace Elastic Engineering, Multicloud, Data","opengraph_tag":"","x_tag":"","teaser_flag":"Technical Blog","seo_titile":"GitHub Webhooks Best Practices | Rackspace Technology","field_topics":"","field_slug":"take-github-webhooks-event-processing-to-the-next-level","footnotes":""},"categories":[178],"tags":[204],"class_list":["post-7848","blogs","type-blogs","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-technical"],"_links":{"self":[{"href":"https:\/\/www.rackspace.com\/de\/wp-json\/wp\/v2\/blogs\/7848","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rackspace.com\/de\/wp-json\/wp\/v2\/blogs"}],"about":[{"href":"https:\/\/www.rackspace.com\/de\/wp-json\/wp\/v2\/types\/blogs"}],"author":[{"embeddable":true,"href":"https:\/\/www.rackspace.com\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rackspace.com\/de\/wp-json\/wp\/v2\/comments?post=7848"}],"version-history":[{"count":4,"href":"https:\/\/www.rackspace.com\/de\/wp-json\/wp\/v2\/blogs\/7848\/revisions"}],"predecessor-version":[{"id":17121,"href":"https:\/\/www.rackspace.com\/de\/wp-json\/wp\/v2\/blogs\/7848\/revisions\/17121"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.rackspace.com\/de\/wp-json\/wp\/v2\/media\/7850"}],"wp:attachment":[{"href":"https:\/\/www.rackspace.com\/de\/wp-json\/wp\/v2\/media?parent=7848"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rackspace.com\/de\/wp-json\/wp\/v2\/categories?post=7848"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rackspace.com\/de\/wp-json\/wp\/v2\/tags?post=7848"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}