Add composable Azure resources for Spring Boot applications
- Dominant language
- Go
- Stars
- 569
- Forks
- 364
- Avg merge
- 2d 19h
- Merged PRs (30d)
- 136
Description
Add extension-owned, composable resource templates to `azure.springboot` for the initial Azure services supported by the extension. Developers should be able to add a resource through the standard `azd add` experience and get the infrastructure, identity, role assignments, and outputs needed by a Spring Boot application.
These resources should use the layered provisioning and micro-template capabilities tracked by [#9765](https://github.com/Azure/azure-dev/issues/9765). Each resource must be independently composable, removable, and reusable across Spring Boot projects. The templates should expose stable outputs that the extension can translate into Spring Boot configuration without requiring connection strings or access keys.
We need to:
- Implement all Spring Boot-specific templates and integration behavior in `cli/azd/extensions/azure.springboot/`.
- Contribute the following resources to the standard `azd add` experience:
- Azure Database for PostgreSQL
- Azure Service Bus
- Azure Storage
- Azure Key Vault
- Use extension-owned micro-templates for each resource.
- Place each added resource in its own layer so it can be provisioned, updated, and removed independently.
- Support adding more than one instance of the same resource type without input or output collisions.
- Use stable, documented input and output names compatible with the Spring Boot configuration mapping issue.
- Provision managed identity and least-privilege role assignments required by the selected Spring Boot services.
- Prefer Microsoft Entra authentication and passwordless access.
- Disable local or access-key authentication where doing so is supported and does not prevent the intended local-development workflow.
- Avoid generating or exposing connection strings, passwords, and access keys.
- Allow explicit project configuration to override resource names, locations, SKUs, capacity, networking, and other supported settings.
- Preserve user-owned changes when a template has been materialized into the project.
- Validate required inputs before provisioning and return actionable errors for invalid or unsupported combinations.
- Document the Azure resources, defaults, outputs, identities, role assignments, and estimated cost considerations introduced by each template.
- Add tests that validate each template independently and in combination with the others.
- Add tests that verify multiple instances of a resource type do not collide.
- Add end-to-end coverage that uses `azd add` followed by `azd up` for a representative Spring Boot application.
- Verify that each provisioned resource can be consumed by the configuration mappings defined for the extension.
- Link this issue as blocked by:
- [#9767](https://github.com/Azure/azure-dev/issues/9767) for layer-aware extension APIs
- [#9770](https://github.com/Azure/azure-dev/issues/9770) for extension-contributed `azd add` items
- [#9771](https://github.com/Azure/azure-dev/issues/9771) for input and output remapping
- [#9768](https://github.com/Azure/azure-dev/issues/9768) for complete micro-template composition
- The `azure.springboot` extension foundation issue
- The Spring Boot configuration mapping issue
## Boundaries
- Do not add Spring-specific commands or verbs.
- Do not add an `azd spring` command namespace.
- Do not add an extension-specific alternative to `azd add`.
- Do not modify azd core behavior, layered provisioning, or template composition.
- Do not add Spring-specific resource types to the core `azure.yaml` schema.
- Do not add these resources to azd’s built-in catalog.
- Do not modify application source, Maven configuration, or Spring configuration.
- Do not automatically add Spring Cloud Azure dependencies.
- Do not provision resources that the developer did not select.
- Do not generate connection strings, passwords, access keys, or other long-lived credentials.
- Do not write secrets into project files, command output, or telemetry.
- Do not add MySQL, Redis, MongoDB, Cosmos DB, Event Hubs, or other integrations in this issue.
- Do not add Gradle support in this issue.
- Do not target Azure Spring Apps.
- If the extension framework cannot contribute or compose these resources through standard `azd` workflows, file the gap against the appropriate core epic rather than adding a workaround, parallel command, or core change in this issue.
Contributor guide
Research direction
Start in cli/azd/extensions/azure.springboot/ and read the blocked layer, azd add, input/output remapping, and micro-template issues before choosing an implementation slice. Define the four extension-owned resources and their independent layers, then verify the listed unit, combination, collision, azd add/azd up, and configuration-mapping coverage. Done means selected resources compose without collisions, expose documented passwordless outputs, preserve materialized changes, and satisfy the stated boundaries.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- azure, go
- Domain
- cli, cloud, infrastructure
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 28/100