frostmoln_appgw_backend (Resource)
Manages a backend in an Application Gateway pool: one destination inside your VPC, named by its IP address.
Two things gate a backend, both deliberately:
- The address must lie inside the gateway's own VPC range. Anything else is refused — without that check the gateway would be an open proxy.
- Creating a backend does not open the path to it. The platform never edits your security groups implicitly. Use
frostmoln_appgw_backend_authorizationto add the one ingress rule, which is audited.
The backend API has no update operation, so every attribute forces a new resource.
Authoritative scope — who owns what on this resource, declared in internal/scopedecl and machine-checked against the schema.
Enacted and reconciled — every configurable attribute not listed below: the platform applies it, and a refresh reads the truth back.
Create-immutable — address, gateway_id, pool_id, port, source_id, source_kind, weight: the API has no update route for a backend — a change destroys and re-creates it.
Observed, not enacted — tags_all: keys set outside Terraform — in the portal, by the fm CLI, or stamped by the platform — appear only here and are kept on every apply, never removed.
Example Usage
# By address. It must lie inside the gateway's own VPC range.
resource "frostmoln_appgw_backend" "web_1" {
gateway_id = frostmoln_application_gateway.edge.id
pool_id = frostmoln_appgw_backend_pool.web.id
address = "10.0.1.10"
port = 8080
weight = 1
# Resource tags: your own metadata for search and filtering. Merged with
# the provider's default_tags; changing them updates in place.
tags = {
env = "prod"
}
}
# By instance: the platform resolves the VPC address itself, so `address` must
# not be set.
resource "frostmoln_appgw_backend" "web_2" {
gateway_id = frostmoln_application_gateway.edge.id
pool_id = frostmoln_appgw_backend_pool.web.id
source_kind = "instance"
source_id = frostmoln_instance.web.id
port = 8080
}
# Creating a backend does NOT open the path to it. See
# frostmoln_appgw_backend_authorization.Schema
Required
gateway_id(String) The Application Gateway this backend's pool belongs to.pool_id(String) The backend pool this backend belongs to.port(Number) The port the backend listens on.
Optional
address(String) The backend's IP address. It must lie inside the gateway's own VPC range; anything else is refused.source_id(String) Reserved. It will name the instance or load balancer whose address the platform resolves, oncesource_kindgains those values; it is refused today.source_kind(String) How the destination is named.addressis the only value available:addressis an IP inside your VPC.instanceandload_balancerare reserved for naming a backend by an instance or load balancer id and letting the platform resolve its address. The platform refuses them today, so they are not offered here rather than being accepted and failing partway through an apply that has already built the gateway.tags(Map of String) Resource tags on the backend: your own key/value metadata for search and filtering, stored by the platform only and never pushed to the appliance. Changing them updates the backend in place (every other attribute replaces it): no config apply, noconfig_generationchange. At most 32 keys including the tenant's default tags, which the platform merges in at create; a key is 1-64 bytes matching^[a-zA-Z0-9]([a-zA-Z0-9._:/-]*[a-zA-Z0-9])?$, a value at most 256 bytes; keys beginningfrostmoln_orfrostmoln-(any case) are reserved. Merged with the provider'sdefault_tagson every write (a key set here wins). Holds only the keys this configuration sets; the full set is intags_all.weight(Number) Relative share of traffic among the pool's backends. Omit to use the platform default.
Read-Only
created_at(String) The creation timestamp.enabled(Boolean) Whether the backend is receiving traffic.id(String) The unique identifier of the backend.status(String) The backend's health as the gateway sees it:healthy,unhealthy,drainingorunknown. An observation older than five minutes readsunknownrather than continuing to report what was last seen, so silence is never reported ashealthy.~> It reads
unknownfor every backend today. The ingest that reports observations is separate work that has not shipped, so nothing writesstatusorstatus_observed_atyet and every backend readsunknownwhatever its real state. Do not build a health display, an alert or alifecyclecondition on this field until that lands.status_observed_at(String) Whenstatuswas last observed, or null if it never has been. Null for every backend today — seestatus.tags_all(Map of String) Every tag the platform holds on this resource: the provider'sdefault_tags, this resource's owntags(which win on a shared key), and any key set outside Terraform — in the portal, by the fm CLI, or stamped by the platform. Keys set outside Terraform appear only here and are kept on every apply, never removed.updated_at(String) The last update timestamp.