s3_presign_url
Generate a presigned URL (or presigned DELETE/HEAD/PUT URL) for S3 operations.
Parameters
- bucketstringrequireddefault env S3_BUCKET
- Bucket name used for signing.
- keystringrequired
- Object key to access.
- methodstringdefault "GET"
- One of
GET,PUT,HEAD,DELETE. - expires_innumberdefault 3600
- URL validity in seconds (
1..604800). - content_typestringdefault "application/octet-stream"
- Optional content type for presigned
PUT. - content_lengthnumber
- Optional content length hint for presigned
PUT. - regionstringdefault S3_REGION / AWS_REGION
- Explicit AWS/S3 region override.
- endpoint_urlstringdefault env AWS_ENDPOINT_URL
- Optional custom S3-compatible endpoint.
- force_path_stylebooldefault false
- Force path-style bucket addressing.
- output_keystringdefault "s3"
- Prefix for context output keys.
Context Output
{output_key}_bucket— Bucket used for signing.{output_key}_key— Object key used for signing.{output_key}_method— HTTP method used.{output_key}_expires_in— Expiration window in seconds.{output_key}_url— Presigned URL string.{output_key}_headers— Required headers for signing (if any).{output_key}_success—trueon success.
Example
local flow = Flow.new("s3_presign")
flow:step("setup", nodes.s3_put_object({
bucket = env("S3_BUCKET"),
key = "raw/temp/demo/presign.txt",
content = "Hello from presign flow",
output_key = "upload"
}))
flow:step("presign", nodes.s3_presign_url({
bucket = env("S3_BUCKET"),
key = "raw/temp/demo/presign.txt",
method = "GET",
expires_in = 600,
output_key = "presigned"
})):depends_on("setup")
flow:step("read", nodes.http_get({
url = "${ctx.presigned_url}",
output_key = "download"
})):depends_on("presign")
flow:step("cleanup", nodes.s3_delete_object({
bucket = env("S3_BUCKET"),
key = "raw/temp/demo/presign.txt",
output_key = "deleted"
})):depends_on("read")
flow:step("log", nodes.log({
message = "Presigned URL generated (${ctx.presigned_expires_in}s): ${ctx.presigned_url}"
})):depends_on("cleanup")
return flow