New to Kestra?
Use blueprints to kickstart your first workflows.
Use OpenSearch as a config store for Kestra flows. Put a JSON document under a known key, Get it back, and read fields from the returned document.
Every team ends up with small reference documents that many flows need: batch sizes, environment targets, feature switches, ownership records. This blueprint shows the simplest durable home for them, an OpenSearch index used as a key-value config store. io.kestra.plugin.opensearch.Put writes a JSON document under a fixed key, io.kestra.plugin.opensearch.Request reads it back by that key, and a log task consumes individual fields from the returned document.
put_config (io.kestra.plugin.opensearch.Put) indexes a small map of settings into the flow-config index under the key ingestion-settings. Writing the same key again overwrites the document, so the store always holds the latest version.get_config (io.kestra.plugin.opensearch.Request) fetches the document by index and key. The document is exposed as {{ outputs.get_config.row }}, with each field addressable directly.log_owner logs {{ outputs.get_config.response._source.owner }} and {{ outputs.get_config.response._source.batch_size }}, the same pattern any downstream task would use to consume stored settings.errors block posts a Discord alert when either the write or the read fails, naming the flow and execution.A config store is only useful when reads and writes are observable. Kestra gives the roundtrip an execution history, per-task logs, and outputs that flow into any downstream task, so you can see exactly which execution wrote which settings and which flows consumed them. Splitting the Put into its own flow later gives you an audited write path with a full change trail.
flow-config index.OPENSEARCH_HOST: OpenSearch endpoint, for example https://opensearch.example.com:9200.OPENSEARCH_USERNAME: OpenSearch username.OPENSEARCH_PASSWORD: OpenSearch password.DISCORD_WEBHOOK_URL: Discord incoming webhook URL.value map with your real settings and rename the index and key to match your conventions.{{ outputs.get_config.response._source.batch_size }} into task properties of a real ingestion flow.io.kestra.plugin.core.flow.If to branch on a stored feature switch.