Trigger
type: "io.kestra.plugin.gcp.gcs.Trigger"
Wait for files on Google cloud storage
This trigger will poll every interval
a GCS bucket. You can search for all files in a bucket or directory in from
or you can filter the files with a regExp
.The detection is atomic, internally we do a list and interact only with files listed.
Once a file is detected, we download the file on internal storage and processed with declared action
in order to move or delete the files from the bucket (to avoid double detection on new poll)
Examples
Wait for a list of file on a GCS bucket and iterate through the files
id: gcs-listen
namespace: io.kestra.tests
tasks:
- id: each
type: io.kestra.core.tasks.flows.EachSequential
tasks:
- id: return
type: io.kestra.core.tasks.debugs.Return
format: "{{taskrun.value}}"
value: "{{ trigger.blobs | jq('.[].uri') }}"
triggers:
- id: watch
type: io.kestra.plugin.gcp.gcs.Trigger
interval: "PT5M"
from: gs://my-bucket/kestra/listen/
action: MOVE
moveDirectory: gs://my-bucket/kestra/archive/
Properties
action
- Type: string
- Dynamic: ✔️
- Required: ✔️
- Possible Values:
MOVE
DELETE
The action to do on find files
from
- Type: string
- Dynamic: ✔️
- Required: ✔️
The directory to list
interval
- Type: string
- Dynamic: ❌
- Required: ❌
- Default:
PT1S
- Format:
duration
Interval between polling
The interval between 2 different test of schedule, this can avoid to overload the remote system with too many call. For most of trigger that depend on external system, a minimal interval must be at least PT30S. See ISO_8601 Durations for more information of available interval value
listingType
- Type: string
- Dynamic: ❌
- Required: ❌
- Default:
DIRECTORY
- Possible Values:
RECURSIVE
DIRECTORY
The listing type you want (like directory or recursive)
if DIRECTORY, will only list objects in the specified directory
if RECURSIVE, will list objects in the specified directory recursively
Default value is DIRECTORY
When using RECURSIVE value, be carefull to move your files to a location not in the from
scope
moveDirectory
- Type: string
- Dynamic: ✔️
- Required: ❌
The destination directory in case off
MOVE
projectId
- Type: string
- Dynamic: ✔️
- Required: ❌
The GCP project id
regExp
- Type: string
- Dynamic: ✔️
- Required: ❌
A regexp to filter on full path
ex:
regExp: .*
to match all files
regExp: .*2020-01-0.\\.csv
to match files between 01 and 09 of january ending with .csv
scopes
- Type: array
- SubType: string
- Dynamic: ✔️
- Required: ❌
- Default:
[https://www.googleapis.com/auth/cloud-platform]
The GCP scopes to used
serviceAccount
- Type: string
- Dynamic: ✔️
- Required: ❌
The GCP service account key
Outputs
blobs
- Type: array
- SubType: Blob
The bucket of the downloaded file
Definitions
Blob
bucket
- Type: string
- Dynamic: ❓
- Required: ❌
cacheControl
- Type: string
- Dynamic: ❓
- Required: ❌
componentCount
- Type: integer
- Dynamic: ❓
- Required: ❌
contentDisposition
- Type: string
- Dynamic: ❓
- Required: ❌
contentEncoding
- Type: string
- Dynamic: ❓
- Required: ❌
contentLanguage
- Type: string
- Dynamic: ❓
- Required: ❌
contentType
- Type: string
- Dynamic: ❓
- Required: ❌
crc32c
- Type: string
- Dynamic: ❓
- Required: ❌
createTime
- Type: string
- Dynamic: ❓
- Required: ❌
customTime
- Type: string
- Dynamic: ❓
- Required: ❌
deleteTime
- Type: string
- Dynamic: ❓
- Required: ❌
etag
- Type: string
- Dynamic: ❓
- Required: ❌
eventBasedHold
- Type: boolean
- Dynamic: ❓
- Required: ❌
generatedId
- Type: string
- Dynamic: ❓
- Required: ❌
isDirectory
- Type: boolean
- Dynamic: ❓
- Required: ❌
kmsKeyName
- Type: string
- Dynamic: ❓
- Required: ❌
md5
- Type: string
- Dynamic: ❓
- Required: ❌
mediaLink
- Type: string
- Dynamic: ❓
- Required: ❌
metaGeneration
- Type: integer
- Dynamic: ❓
- Required: ❌
metadata
- Type: object
- SubType: string
- Dynamic: ❓
- Required: ❌
name
- Type: string
- Dynamic: ❓
- Required: ❌
retentionExpirationTime
- Type: integer
- Dynamic: ❓
- Required: ❌
selfLink
- Type: string
- Dynamic: ❓
- Required: ❌
size
- Type: integer
- Dynamic: ❓
- Required: ❌
temporaryHold
- Type: boolean
- Dynamic: ❓
- Required: ❌
timeStorageClassUpdated
- Type: string
- Dynamic: ❓
- Required: ❌
updateTime
- Type: string
- Dynamic: ❓
- Required: ❌
uri
- Type: string
- Dynamic: ❓
- Required: ❌