AWS Data Pipeline n'est plus disponible pour les nouveaux clients. Les clients existants de AWS Data Pipeline peuvent continuer à utiliser le service normalement. En savoir plus
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Expressions
Les expressions vous permettent de partager une valeur entre objets associés. Les expressions sont traitées par le service web AWS Data Pipeline lors de l'exécution, en s'assurant que toutes les expressions sont remplacées par la valeur de l'expression.
Les expressions sont délimitées par : « #{ » et « } ». Vous pouvez utiliser une expression dans n'importe quel objet de définition de pipeline où une chaîne est légale. Si un emplacement est une référence ou est de type ID, NAME, TYPE, SPHERE, sa valeur n'est pas évaluée et il est utilisé tel quel.
L'expression suivante appelle l'une des fonctions AWS Data Pipeline. Pour plus d'informations, consultez Evaluation d'expression.
#{format(myDateTime,'YYYY-MM-dd hh:mm:ss')}
Référencement des champs et des objets
Les expressions peuvent utiliser les champs de l'objet actuel où l'expression existe, ou les champs d'un autre objet qui est lié par une référence.
Le format d'emplacement se compose de l'heure de création suivie par l'heure de création d'objet, par exemple : @S3BackupLocation_2018-01-31T11:05:33
.
Vous pouvez également référencer l'ID d'emplacement exact spécifié dans la définition de pipeline, comme l'ID de l'emplacement de sauvegarde Amazon S3. Pour référencer l'ID d'emplacement, utilisez #{parent.@id}
.
Dans l'exemple suivant, le champ filePath
fait référence au champ id
du même objet pour former un nom de fichier. La valeur de filePath
correspond à « s3://mybucket/ExampleDataNode.csv
».
{ "id" : "ExampleDataNode", "type" : "S3DataNode", "schedule" : {"ref" : "ExampleSchedule"}, "filePath" : "s3://mybucket/#{parent.@id}.csv", "precondition" : {"ref" : "ExampleCondition"}, "onFail" : {"ref" : "FailureNotify"} }
Pour utiliser un champ qui existe sur un autre objet lié par une référence, utilisez le mot clé node
. Ce mot clé n'est disponible qu'avec les objets d'alarme (alarm) et de condition préalable (precondition).
Dans l'exemple précédent, une expression d'un objet SnsAlarm
peut faire référence à la plage de dates et à la plage d'heures d'un objet Schedule
, car S3DataNode
fait référence aux deux.
En particulier, le champ message
d'un FailureNotify
peut utiliser les champs liés à l'exécution @scheduledStartTime
et @scheduledEndTime
d'ExampleSchedule
, car le champ onFail
d'ExampleDataNode
fait référence à FailureNotify
et que son champ schedule
fait référence à ExampleSchedule
.
{ "id" : "FailureNotify", "type" : "SnsAlarm", "subject" : "Failed to run pipeline component", "message": "Error for interval #{node.@scheduledStartTime}..#{node.@scheduledEndTime}.", "topicArn":"arn:aws:sns:us-east-1:28619EXAMPLE:ExampleTopic" },
Note
Vous pouvez créer des pipelines ayant des dépendances, telles que les tâches de votre pipeline qui dépendent du travail d'autres systèmes ou tâches. Si votre pipeline nécessite certaines ressources, ajoutez ces dépendances au pipeline à l'aide de conditions préalables que vous associez à des nœuds de données et à des tâches. Cette étape rend vos pipelines plus faciles à déboguer et plus résistants. De plus, conservez vos dépendances au sein d'un seul pipeline chaque fois que possible, car la résolution des problèmes de pipeline est difficile.
Expressions imbriquées
AWS Data Pipeline vous permet d'imbriquer des valeurs pour créer des expressions plus complexes. Par exemple, pour effectuer un calcul de temps (soustraire 30 minutes de scheduledStartTime
) et mettre en forme le résultat à utiliser dans une définition de pipeline, vous pouvez utiliser l'expression suivante dans une activité :
#{format(minusMinutes(@scheduledStartTime,30),'YYYY-MM-dd hh:mm:ss')}
et à l'aide du préfixe node
si l'expression fait une partie d'un SnsAlarm ou d'un Precondition :
#{format(minusMinutes(node.@scheduledStartTime,30),'YYYY-MM-dd hh:mm:ss')}
Listes
Les expressions peuvent être évaluées sur les listes et les fonctions sur les listes. Par exemple, supposons que la liste soit définie comme suit : "myList":["one","two"]
. Si cette liste est utilisée dans l'expression#{'this is ' + myList}
, il évaluera les["this is one", "this is two"]
. Si vous avez deux listes, Data Pipeline les aplatit lors de leur évaluation. Par exemple, si myList1
est défini comme [1,2]
et myList2
comme [3,4]
, l'expression [#{myList1},
#{myList2}]
est analysée comme [1,2,3,4]
.
Expression de nœud
AWS Data Pipeline utilise l'expression #{node.*}
dans SnsAlarm
ou PreCondition
pour créer une référence arrière à l'objet parent d'un composant du pipeline. Comme SnsAlarm
et PreCondition
sont référencés depuis une activité ou une ressource sans référence arrière à leur encontre, node
offre le moyen de faire référence au référent. Par exemple, la définition de pipeline suivante illustre comment une notification d'échec peut utiliser node
pour effectuer une référence à son parent, dans ce cas ShellCommandActivity
, et inclure les heures de début et de fin planifiées du parent dans le message SnsAlarm
. La référence scheduledStartTime sur ShellCommandActivity ne nécessite pas le préfixe node
, car scheduledStartTime fait référence à lui-même.
Note
Les champs précédés par le signe AT (@) indiquent que ces champs sont des champs liés à l'exécution.
{ "id" : "ShellOut", "type" : "ShellCommandActivity", "input" : {"ref" : "HourlyData"}, "command" : "/home/userName/xxx.sh #{@scheduledStartTime} #{@scheduledEndTime}", "schedule" : {"ref" : "HourlyPeriod"}, "stderr" : "/tmp/stderr:#{@scheduledStartTime}", "stdout" : "/tmp/stdout:#{@scheduledStartTime}", "onFail" : {"ref" : "FailureNotify"}, }, { "id" : "FailureNotify", "type" : "SnsAlarm", "subject" : "Failed to run pipeline component", "message": "Error for interval #{node.@scheduledStartTime}..#{node.@scheduledEndTime}.", "topicArn":"arn:aws:sns:us-east-1:28619EXAMPLE:ExampleTopic" },
AWS Data Pipeline prend en charge les références transitives pour les champs définis par l'utilisateur, mais pas pour les champs liés à l'exécution. Une référence transitive est une référence entre deux composants d'un pipeline qui dépend d'un autre composant de pipeline comme intermédiaire. L'exemple suivant montre une référence à un champ transitif défini par l'utilisateur et une référence à un champ lié à l'exécution non transitif, les deux étant valides. Pour plus d'informations, consultez Champs définis par l'utilisateur.
{ "name": "DefaultActivity1", "type": "CopyActivity", "schedule": {"ref": "Once"}, "input": {"ref": "s3nodeOne"}, "onSuccess": {"ref": "action"}, "workerGroup": "test", "output": {"ref": "s3nodeTwo"} }, { "name": "action", "type": "SnsAlarm", "message": "S3 bucket '#{node.output.directoryPath}' succeeded at #{node.@actualEndTime}.", "subject": "Testing", "topicArn": "arn:aws:sns:us-east-1:28619EXAMPLE:ExampleTopic", "role": "DataPipelineDefaultRole" }
Evaluation d'expression
AWS Data Pipeline fournit un ensemble de fonctions que vous pouvez utiliser pour calculer la valeur d'un champ. L'exemple suivant utilise la fonction makeDate
pour définir le champ startDateTime
d'un objet Schedule
avec la valeur "2011-05-24T0:00:00"
(GMT/UTC).
"startDateTime" : "makeDate(2011,5,24)"