Version 1.0.10 of the GitHub AT-AT project marks a significant evolution in the initiative to provide seamless infrastructure and application deployment solutions.

In this release, we introduced a new sub-module, azure-fn-app, that builds upon the foundation established in the previous version with azure-fn-core. While azure-fn-core focused on provisioning shared infrastructure, such as Azure Function service plans, azure-fn-app takes it a step further by provisioning the Function App itself and integrating it into the shared environment. This new module doesn’t just stop at infrastructure; it delivers a fully working .NET Azure Function App complete with Dependency Injection, Unit and Integration tests, and an automated CI pipeline. While Continuous Deployment (CD) is still in the works, exciting new features like Just-in-Time (JIT) environments for integration testing are on the horizon.

Building on the Core Foundation

To understand the significance of azure-fn-app, it’s important to revisit what azure-fn-core brought to the table. The core module provisioned shared resources like Azure Function service plans, Application Insights, and Key Vault—the foundational components for hosting and monitoring Azure Functions. In many organizations, this kind of shared infrastructure would typically fall under the purview of a platform engineering team, providing a robust environment that application development teams can rely on.

The introduction of azure-fn-app complements this shared infrastructure by enabling application developers to take ownership of the Function Apps themselves. This module provisions an Azure Function App and connects it to the shared services set up by azure-fn-core, creating a seamless integration between infrastructure and application code. More importantly, it demonstrates how teams can expand their Terraform-based solutions to manage both infrastructure and application code in tandem.

From Infrastructure-as-Code to Application Code

Until this release, the GitHub AT-AT project focused solely on provisioning infrastructure using Terraform’s HCL and automating workflows with GitHub Actions YAML files. With the azure-fn-app module, we’ve taken the next logical step: deploying application source code alongside the infrastructure. In this case, we’re deploying a .NET Azure Function App that serves as a working example for application developers. The “Function App” resource in Azure essentially acts as the deployment target for Azure Functions developers, hosted on the service plans provisioned by azure-fn-core.

This separation of responsibilities — shared infrastructure managed by platform teams and application-specific resources managed by development teams — is a critical aspect of modern cloud operations. The azure-fn-app module embodies this principle, encouraging application developers to engage with Terraform to manage their application’s infrastructure dependencies. In doing so, it bridges the gap between traditional infrastructure engineering and modern application development, reinforcing why developers should learn Terraform.

A Fully Working .NET Azure Functions Solution

What truly sets azure-fn-app apart is the level of detail and functionality it provides out of the box. This module doesn’t just create a deployment target for Azure Functions; it sets up a complete .NET Azure Functions solution, ready to deploy and run. The structure includes a main class library for implementation logic, a FunctionHost project that serves as the entry point for Azure, and a Tests project equipped with both Unit and Integration tests.

Alt

Dependency Injection is baked into the solution, adhering to best practices for modern .NET applications. Developers only need to specify the Root Namespace for their project, following .NET naming conventions. In the provided example, we use “Qonq.Tenant” as the namespace for a hypothetical Tenant microservice, but the setup is flexible enough to accommodate any naming convention or service architecture.

Introducing Automated Testing with GitHub Actions

Another key feature of azure-fn-app is its built-in Continuous Integration pipeline, powered by GitHub Actions. This pipeline includes workflows for running Automated Unit Tests and Integration Tests, both executed using the XUnit framework. While XUnit is commonly associated with Unit Testing, it’s equally capable of handling Integration Tests, making it a versatile choice for end-to-end test automation.

Alt

These tests can be triggered automatically on Pull Requests, ensuring that new code changes don’t introduce regression defects. Additionally, manual triggers for the Unit and Integration Tests workflows are included, enabling ad-hoc testing when needed. This flexibility is invaluable for teams looking to maintain high-quality code while iterating quickly.

Alt

The integration tests provided by the module are relatively simple at this stage, but they lay the groundwork for an exciting future feature: JIT environments. Imagine dynamically provisioning a brand-new environment, running integration tests to validate functionality, capturing the test outcomes, and then tearing down the environment — all as part of an automated process. This capability, planned for a future release, will revolutionize the way teams approach integration testing, reducing dependencies on shared environments and improving test reliability.

Looking Ahead

The azure-fn-app module represents a significant milestone for the GitHub AT-AT project, showcasing how Terraform can be used to manage both infrastructure and application code in a cohesive and scalable manner. By empowering application developers to own their infrastructure dependencies and providing a seamless CI pipeline for automated testing, this module bridges the gap between platform and application teams.

While this release doesn’t yet include Continuous Deployment workflows, they are on the roadmap and will further enhance the module’s capabilities. Similarly, the introduction of JIT environments for integration testing promises to bring even greater flexibility and efficiency to the development process.

Version 1.0.10 is just the beginning of what’s possible with GitHub AT-AT. As we continue to iterate and expand the project, the focus remains on delivering practical, real-world solutions that help teams embrace Infrastructure-as-Code and modern development practices. Stay tuned for more exciting updates and features in future releases.