Skip to main content
Version: 3.0

AWS S3 Nodes

Fetch one object from, or write one object to, Amazon S3 or an S3-compatible store such as MinIO from your pipelines.

Needs
An S3 connection (bucket and prefix)
Operations
Fetch Object · Write Object
Defaults
Pattern match picks the most recently modified
Output
Fetch: base64 content plus object metadata

Amazon S3 and S3-compatible stores (MinIO, Ceph, Wasabi, …) hold the objects a plant produces and consumes: exports, reports, model artifacts, archives. MaestroHub provides two dedicated nodes for fetching an object into a pipeline and writing one out, against the bucket and prefix of the connection.

Configuration Quick Reference​

FieldWhat you chooseDetails
ParametersConnection, Function, Function Parameters, Timeout OverrideSelect the connection profile, function, configure function parameters with expression support, and optionally override timeout.
SettingsDescription, Timeout (seconds), Retry on Timeout, Retry on Fail, On ErrorNode description, maximum execution time, retry behavior on timeout or failure, and error handling strategy. All execution settings default to pipeline-level values.

S3 Fetch Node​

Read one object. objectKey may be an exact key, a wildcard or regex pattern, or a template; versionId reads a specific version of a versioned bucket. When a pattern matches several objects, the function's When Several Objects Match setting picks one: the most recently modified (the default) or the one whose key sorts last. If the listing under the pattern's prefix holds more objects than the discovery limit, the node fails rather than choosing among part of them.

Function NamePurposeCommon Use Cases
Fetch ObjectRead the object at objectKey (optionally versionId, maxFileSizeMB, discoveryLimit)Daily report ingestion, picking up partner drops, hydrating a dataset

Output Structure​

{
"result": {
"data": "aWQsbmFtZSx2YWx1ZQoxLGFscGhhLDEwMAo...",
"metadata": {
"objectKey": "reports/orders.csv",
"fileName": "orders.csv",
"fileType": "csv",
"sizeBytes": 2048,
"discoveryPattern": "^reports/.*\\.csv$",
"selectedBy": "lastModified",
"matchCount": 3,
"contentType": "text/csv",
"etag": "\"9b2cf535f27731c974343645a3985328\"",
"lastModified": "2026-09-07T08:30:00Z",
"storageClass": "STANDARD"
}
},
"_metadata": { "success": true, "functionId": "<function-id>", "durationMs": 178, "timestamp": "2026-09-07T10:30:00Z" }
}
FieldTypeDescription
result.datastringThe object content, always base64-encoded; decode it downstream, or feed it to a File Extractor with Input Field result.data
result.metadata.objectKeystringThe key read: the resolved one when objectKey was a pattern
result.metadata.fileNamestringBasename of the key
result.metadata.fileTypestringExtension without the leading dot
result.metadata.sizeBytesnumberObject size in bytes
result.metadata.discoveryPatternstringThe pattern that resolved the key (only when objectKey was a pattern)
result.metadata.selectedBystringThe rule that picked the object among the matches: lastModified or name (only when objectKey was a pattern)
result.metadata.matchCountnumberHow many objects the pattern matched (only when objectKey was a pattern)
result.metadata.contentTypestringMIME content type (when S3 reports it)
result.metadata.etagstringObject ETag (when S3 reports it)
result.metadata.lastModifiedstringLast modification timestamp, RFC 3339 UTC (when S3 reports it)
result.metadata.versionIdstringThe version read (versioned buckets)
result.metadata.serverSideEncryptionstringEncryption at rest (AES256, aws:kms) when the object is encrypted
result.metadata.storageClassstringStorage class (when S3 reports it)

S3 Write Node​

Write one object from data to objectKey. Data is written as text, or decoded from base64 when the function's Input Format is base64 (output from a Data Serializer or an S3 Fetch needs this). Optional settings: contentType, storageClass, serverSideEncryption, cacheControl, metadata and tags. With Overwrite Existing off, an existing key is kept and a timestamped variant is written instead. Generate Presigned URL adds a time-limited download link to the result.

Function NamePurposeCommon Use Cases
Write ObjectUpload data to objectKeyExporting pipeline results, publishing reports, archiving

Output Structure​

{
"result": {
"objectKey": "exports/orders.csv",
"bytesWritten": 4096,
"contentType": "text/csv",
"storageClass": "STANDARD",
"etag": "\"9b2cf535f27731c974343645a3985328\"",
"presignedUrl": "https://bucket.s3.amazonaws.com/exports/orders.csv?X-Amz-Signature=...",
"presignedUrlExpiresAt": "2026-09-07T11:30:00Z",
"presignedUrlExpiry": 3600
},
"_metadata": { "success": true, "functionId": "<function-id>", "durationMs": 245, "timestamp": "2026-09-07T10:30:00Z" }
}
FieldTypeDescription
result.objectKeystringThe key written: a timestamped variant when the object existed and Overwrite Existing was off
result.bytesWrittennumberBytes uploaded
result.contentTypestringThe content type stored
result.storageClassstringThe storage class stored
result.etagstringThe object's ETag (when S3 reports it)
result.versionIdstringThe version S3 assigned (versioned buckets)
result.serverSideEncryptionstringThe encryption applied (when the object is encrypted at rest)
result.presignedUrlstringA presigned GET URL, only when Generate Presigned URL is on and signing succeeded
result.presignedUrlExpiresAtstringWhen the presigned URL stops working, ISO 8601 UTC, alongside result.presignedUrl
result.presignedUrlExpirynumberDeprecated: the URL's lifetime in whole seconds. Read result.presignedUrlExpiresAt instead
result.presignedUrlErrorstringWhy the presigned URL could not be made, only when it was requested and signing failed; the write itself succeeded

Common Use Cases​

  • Pick up a partner drop: a Schedule trigger → S3 Fetch with objectKey inbound/orders-*.csv → File Extractor (Input Field result.data) → downstream.
  • Publish a report: a SQL Query → Data Serializer (CSV) → S3 Write (Input Format base64, since the serializer emits base64 by default) with objectKey {{ 'reports/' + ($execution.startedAt | date: 'YYYY-MM-DD') + '/orders.csv' }} and Generate Presigned URL on → a Slack or Teams message carrying {{ $node["S3 Write"].result.presignedUrl }}.

The call's own facts ride along under _metadata next to the four every connected node carries: $node["S3 Fetch"]._metadata.bucket names the bucket the call ran against and $node["S3 Fetch"]._metadata.method the operation (s3.fetch.object or s3.write.object).