Ga naar inhoud

Integratiemodules: Logic App, Function App, Container App, Data Factory

De integratiemodules zijn Terraform-modules die een integratieservice in je spoke deployen, al verbonden met de spoke (netwerk, Key Vault, storage account, Log Analytics) en gebouwd op een veilige baseline. Jij kiest een paar instellingen, de module doet de rest. Deze pagina beschrijft de set modules, wat elke module deployt, zijn standaardwaarden en hoe een workload team hem gebruikt. Hoe je de deployment draait: Integratieresources deployen.

Optioneel aanbod, referentieontwerp

Welke modules en versies je platform aanbiedt, hangt af van je platform. De standaardwaarden op deze pagina komen uit de Terraform van de modules. Je platformteam kan ze hebben gewijzigd of een andere versie hebben gepind.

De set modules

Eén rootmodule neemt per servicetype een map aan. Je vult alleen in wat je nodig hebt. Een lege map deployt niets.

Service Input-map Deployt (samenvatting)
Logic App logic_apps Een Standard Logic App op een gedeeld workflow plan, alleen private endpoint, ingebouwde authenticatie, eigen storage account
Function App function_apps (en service_plans) Een Linux Function App, VNet-integratie, private endpoint, op identity gebaseerde toegang tot het storage account van de spoke
Container App container_apps_environment Een Container Apps environment (intern), container apps en jobs in t-shirtmaten
Data Factory data_factories Een Data Factory met managed virtual network, private endpoint en linked services naar de Key Vault en storage van de spoke

Samen vormen ze het ingredient modules van het platform (Servicebeschrijving).

flowchart LR
    cfg["Your configuration<br/>logic_apps, function_apps,<br/>container_apps_environment, data_factories"] --> root["Root module"]
    out["spoke_config<br/>(spoke outputs)"] --> root
    root --> la["Logic App"]
    root --> fa["Function App + service plans"]
    root --> ca["Container Apps environment,<br/>apps and jobs"]
    root --> adf["Data Factory"]
    la & fa & ca & adf -->|"read"| spoke["Spoke: VNet and subnets,<br/>Key Vault, storage account,<br/>Log Analytics"]

Hoe een module je spoke gebruikt

Elke module heeft de beschrijving van je spoke nodig in één variabele, spoke_config. Die wordt gevuld uit een bestand met de outputs van de spoke (zie Integratieresources deployen).

Veld van spoke_config Betekenis
name, environment, location, tags Naam, omgeving, regio en tags van de spoke. Modules erven tags. De Container App-module vereist dat de omgeving nonprod of prod is (zie hieronder).
subscription_id, tenant_id, resource_group_name Waar de spoke staat
virtual_network_id, virtual_network_name Het netwerk van de spoke
subnet_ids, subnet_names Maps van de subnets van de spoke. Modules kiezen subnets op naam (bijvoorbeeld voor private endpoints en voor uitgaande integratie).
key_vault_id, key_vault_name De Key Vault van de spoke
storage_account_id, storage_account_name Het storage account van de spoke
log_analytics_workspace_id, log_analytics_workspace_name Waar logs naartoe gaan

De modules lezen deze resources (Key Vault, storage account, Log Analytics workspace) als bestaande resources. Ze maken ze niet aan. Een module die een genoemd subnet niet kan vinden, mislukt, dus controleer eerst de subnetnamen in je spoke.

Private endpoints: de modules beheren de private DNS zone groups van hun private endpoints niet. Naamresolutie voor de endpoints wordt verwacht te worden geregeld door het platform, bijvoorbeeld met Azure Policy. Vraag het je platformteam.

Logic App

Een Standard Logic App met een geharde baseline.

logic_apps = {
  orders = {
    subnets = {
      private_endpoint_subnet_name   = "<private-endpoint-subnet>"
      logic_app_outbound_subnet_name = "<logic-app-outbound-subnet>"
    }
    authentication_settings = {
      client_id = "<entra-app-client-id>"
    }
    environment_variables = {}
  }
}
Instelling Standaardwaarde en effect
Plan Eén gedeeld workflow service plan voor alle Logic Apps van de spoke, Windows, aangemaakt door de rootmodule uit default_logic_apps_plan: grootte S (WS1; ook M = WS2, L = WS3), minstens 2 instances, zone balancing aan. Plannaam asp-<spoke name>-logicapps in een resource group rg-<spoke name>-logicapps, tenzij je namen opgeeft.
Resource group Standaard wordt een groep per Logic App aangemaakt (create_resource_group, true). Je kunt een bestaande opgeven.
Netwerk Public network access uit. Private endpoint in het subnet dat je noemt, uitgaand verkeer via het outbound-subnet (VNet-integratie). vnet_private_ports_count reserveert private poorten.
Authenticatie Altijd aan. Niet-geauthenticeerde requests krijgen een 401. Toegestane audiences, groepen en identities stel je in met authentication_settings. /runtime/* is uitgesloten, zodat de runhistorie inputs en outputs kan tonen.
Storage Een eigen storage account voor de Logic App, voor isolatie van performance en security, met een firewall die standaard weigert en alleen het outbound-subnet toestaat
Identity System-assigned en een user-assigned managed identity
Hardening Alleen HTTPS, FTPS uitgeschakeld, basic authentication voor FTP en web deploy uitgeschakeld, HTTP/2 aan
Monitoring Application Insights gekoppeld aan de Log Analytics workspace van de spoke, diagnostic settings voor de app en zijn storage
Health check Een workflow met de naam HealthCheck met trigger Request wordt voor de health check gebruikt. Beide namen kunnen worden gewijzigd (namen van maximaal 12 en 7 tekens).

Resourcenamen: logic-<name>, appi-<name>, pe-logic-<name>, id-<name>.

De workflows deployen. De modulerepository bevat twee kleine bouwstenen voor een pipeline: de ene verpakt het Logic App-project (gebruikt parameters.azure.json als parameters.json als dat bestaat en laat local.settings.json weg), de andere deployt het pakket naar de Logic App Standard-resource. Je platformteam geeft je de pipelinetemplate.

Function App

Een Function App op een service plan dat je zelf definieert, met op identity gebaseerde toegang tot het storage account van de spoke.

service_plans = {
  shared-linux = {
    name     = "plan-<name>"
    sku_name = "EP1"
    os_type  = "Linux"
    tags     = {}
  }
}

function_apps = {
  processor = {
    name                      = "func-<name>"
    service_plan_key          = "shared-linux"
    virtual_network_subnet_id = "<integration-subnet-id>"
    app_settings              = { "ENV" = "dev" }
    private_endpoints = {
      default = { subnet_resource_id = "<private-endpoint-subnet-id>" }
    }
  }
}
Instelling Standaardwaarde en effect
Plan Kies met service_plan_key (een plan uit service_plans) of service_plan_resource_id (een bestaand plan). Meerdere apps kunnen een plan delen.
Flex Consumption (FC1) Zet sku_name = "FC1" op het plan en function_app_uses_fc1 = true op de app, met fc1_runtime_name en fc1_runtime_version (standaard node en 20). Eén app per FC1-plan, alleen Linux.
Netwerk VNet-integratie via virtual_network_subnet_id, en een private endpoint is verplicht: geef altijd minstens één item in private_endpoints.
Storage Geen sleutels. De app gebruikt zijn system-assigned identity op het storage account van de spoke: de module geeft hem Storage Blob Data Owner en Storage Blob Data Contributor op dat account, maakt een privé blob container met de naam van de app aan en stelt de op identity gebaseerde AzureWebJobsStorage__...-instellingen in. Stel AzureWebJobsStorage zelf niet in. De module verwijdert het.
Identity System-assigned staat altijd aan. Je kunt user-assigned identities toevoegen via managed_identities.
Site-instellingen Veilige standaardwaarden in site_config: alleen FTPS, minimaal TLS 1.3 (1.2 voor de SCM-site), always on, 32-bit worker uit. Authentication v2 en IP-restricties zijn beschikbaar.
Application Insights Optioneel, via application_insights
Resource group Standaard de resource group van de spoke. Een eigen groep met create_resource_group_for_function_apps en function_apps_resource_group_name.

Linux in de rootmodule

De modulerepository bevat een Linux- en een Windows-Function App-module. De input van de rootmodule accepteert de velden van de Linux-module. Overleg met je platformteam voordat je een Windows Function App plant.

Container App

Een Container Apps environment in je spoke met container apps en container jobs.

container_apps_environment = {
  main = {
    resource_name                = "<name>"
    environment                  = "nonprod"
    vnet_integration_subnet_name = "<container-apps-subnet>"
    container_registry_server    = "<registry>.azurecr.io"
    container_registry_identity  = { name = "<pull-identity>", resource_group_name = "<resource-group>" }
    container_apps = [
      { name = "api", image = "<registry>.azurecr.io/<repository>/api", size = "S", min_replicas = 1, max_replicas = 3 }
    ]
    scheduled_container_jobs = [
      { name = "nightly", image = "<registry>.azurecr.io/<repository>/job", schedule_cron = "0 2 * * *" }
    ]
    storage_queues = [{ name = "work", alert_on_message_added_to_queue = false }]
  }
}
Instelling Standaardwaarde en effect
Environment Naam cae-<name>-<np or p>-<region code>. environment moet nonprod of prod zijn. Als je het niet instelt, wordt de omgeving van spoke_config gebruikt, dus die moet een van de twee zijn. De environment is intern (interne load balancer) in het subnet dat je noemt, op het Consumption workload profile. Logs gaan naar de Log Analytics workspace van de spoke.
Images Je geeft de imagenaam per app of job op. Een gedeelde tag container_image_tag (standaard latest) wordt toegevoegd. Het ophalen gebeurt met een user-assigned managed identity die je noemt (container_registry_identity) op de registry container_registry_server. Hier wordt de gedeelde container registry gebruikt (Gedeelde services).
Maten S 0,25 vCPU, 0,5 GiB. M 0,5 vCPU, 1 GiB. L 1 vCPU, 2 GiB. XL 2 vCPU, 4 GiB. XXL 4 vCPU, 8 GiB. Standaard S.
Container apps Per app: grootte, health check, min_replicas (standaard 0), max_replicas (standaard 1), omgevingsvariabelen, ingress (standaard aan), optioneel Dapr
Container jobs Drie soorten: manual, event (start als er een bericht binnenkomt in een Azure Storage-queue van het storage account van de spoke, één uitvoering tegelijk, pollt elke 30 seconden) en scheduled (cron-expressie). Standaardwaarden per job: timeout 600 seconden, 3 retries, parallelism 1.
Storage-helpers storage_containers, storage_queues en storage_tables maken die onderdelen aan in het storage account van de spoke
Secrets Een user-assigned identity van de environment krijgt Key Vault Certificate User op de Key Vault van de spoke. De connection string van Application Insights wordt als secret in de Key Vault van de spoke opgeslagen.
Application Insights Eén per environment, 30 dagen retentie
Alerts Optioneel, via monitoring_config: mislukte requests, exceptions en berichten die aan gekozen queues zijn toegevoegd. Meldingen per e-mail en/of naar een Teams-kanaal (via het e-mailadres ervan) worden per environment ingeschakeld. Alles staat standaard uit.

Namen: ca-<...> voor apps, cj-<...> voor manual jobs, cj-event-<...> voor event jobs en cj-cron-<...> voor scheduled jobs.

Data Factory

Een Data Factory voor batch-ETL, met een privé netwerkmodel.

data_factories = {
  main = {
    resource_name                = "<name>"
    private_endpoint_subnet_name = "<private-endpoint-subnet>"
    team_members                 = ["<alert-recipient>"]
    enable_alert_failed_pipeline = true
  }
}
Instelling Standaardwaarde en effect
Netwerk Public network access uit, managed virtual network aan, een private endpoint in het subnet dat je noemt
Integration runtime Een Azure integration runtime in het managed netwerk: 8 cores (toegestane waarden 8, 16, 32, 48, 64, 80, 128, 144, 256, 272), compute type General (of MemoryOptimized), time to live 10 minuten
Linked services Naar de Key Vault van de spoke en het storage account van de spoke (blob), geauthenticeerd met de managed identity van de factory. Ze worden door Terraform beheerd, dus wijzigingen die je in de factory aan deze twee maakt, worden overschreven.
Managed private endpoints Naar de Key Vault (vault) en het storage account (blob). De module keurt ze goed: via de API voor de Key Vault, en voor storage via een Azure CLI-aanroep tijdens de deployment. De deployment heeft daarom de Azure CLI nodig en het recht om private endpoint-connections op die resources goed te keuren.
Toegang De identity van de factory krijgt Key Vault Secrets User op de Key Vault en Storage Blob Data Contributor op het storage account
Git-integratie Optioneel vsts_configuration (een Azure DevOps Git-repository) en global_parameters, beide beheerd door Terraform
Monitoring Diagnostische logs (pipeline runs, trigger runs) naar de Log Analytics workspace van de spoke. Een action group DefaultActionGroup stuurt e-mail naar team_members. Een alert voor mislukte pipelines als enable_alert_failed_pipeline true is (standaard false).
Resource group Een nieuwe resource group per Data Factory

De private DNS zone group van de private endpoint van de Data Factory wordt niet door de module beheerd. Die wordt verwacht uit Azure Policy te komen.

Monitoring

Module Wat de module inricht Wat bij jou blijft
Logic App Application Insights, diagnostic settings naar de workspace van de spoke, de naam van een health check-workflow Alerts op je workflows, een HealthCheck-workflow in je app
Function App Optioneel Application Insights Alert rules en de logging van je functiecode
Container App Application Insights, optionele alerts en action groups Kiezen welke alerts je inschakelt, applicatielogging
Data Factory Diagnostics, optionele alert voor mislukte pipelines, een action group Ontvangers, alerts op datakwaliteit

Monitoring op platformniveau: Beheer.

Verantwoordelijkheden

Platformteam Workload team
Modulecode, standaardwaarden, nieuwe versies, pipelinetemplates Ja
De modules, maten, plannen en opties in je configuratie kiezen Ja
Spoke, subnets, Key Vault, storage account, Log Analytics Ja
De applicatie: workflows, functiecode, container images, pipelines Ja
DNS voor private endpoints, firewallregels Ja (op aanvraag) Vraagt aan
Beveiliging van het data plane Ja

De algemene verdeling staat bij Verantwoordelijkheden.