New to Kestra?
Use blueprints to kickstart your first workflows.
Fan out one Temporal workflow per entity from Kestra. Deterministic workflow IDs keep reruns duplicate-free, and Slack reports the nightly batch size.
Temporal excels at running one durable workflow per entity, a customer, an account, a device, but something has to decide each night which entities get one and start them all. This blueprint is that something: a ForEach iterates over a list of entity IDs and io.kestra.plugin.temporal.workflow.Trigger starts a CustomerRefresh workflow per entity on the customers task queue. Every workflow ID is templated from the entity ID, so rerunning the batch after a partial failure re-requests the same IDs instead of double-starting entities that already ran.
entity_ids flow variable holds the demo batch inline; in production this list usually comes from an upstream query task.launch_batch (io.kestra.plugin.core.flow.ForEach) iterates over the list; its direct child start_entity_workflow (io.kestra.plugin.temporal.workflow.Trigger) starts CustomerRefresh with the entity ID as a JSON-encoded argument and customer-refresh-{{ taskrun.value }} as the workflow ID. Deterministic IDs make Temporal the deduplication layer: an entity whose workflow is still running cannot be started twice.workflowId and runId outputs, visible per task run in the execution.notify posts the batch size, computed from the list length, to Slack once every start call has been accepted.errors block posts a distinct alert on any failed start, and a disabled-by-default Schedule trigger runs the batch nightly at 01:00.The per-entity business logic is exactly where it belongs, in Temporal workers with durable retries. What the workers cannot decide is the batch: which entities, when, and after which upstream data is ready. Kestra owns that layer, with schedules, upstream task chaining, secrets for the endpoint, and one execution per batch showing every start call it made.
customers task queue with a CustomerRefresh workflow registered.apiKey property; for mTLS clusters, provide caCert, clientCert, and clientKey.TEMPORAL_ENDPOINT: Temporal frontend address in host:port format, for example temporal.example.com:7233.SLACK_WEBHOOK_URL: Slack incoming webhook URL.workflowType and taskQueue to match a workflow your workers register.disabled: false on the nightly trigger.ForEach values.ForEach task's concurrencyLimit property when the batch grows large.