Espressioni - AWS Data Pipeline

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Espressioni

Le espressioni consentono di condividere un valore negli oggetti correlati. Le espressioni vengono elaborate dal servizio Web AWS Data Pipeline in fase di runtime, accertandosi che tutte le espressioni vengano sostituite con il valore dell'espressione.

Le espressioni sono delimitate da:"#{" e "}". È possibile utilizzare un'espressione in qualsiasi oggetto di definizione della pipeline in cui una stringa è legale. Se uno slot è un riferimento o uno di tipo ID, NAME, TYPE e SPHERE, il valore non viene valutato e viene utilizzato integralmente.

La seguente espressione chiama una delle funzioni AWS Data Pipeline. Per ulteriori informazioni, consultare Valutazione delle espressioni.

#{format(myDateTime,'YYYY-MM-dd hh:mm:ss')}

Riferimento a campi e oggetti

Le espressioni possono utilizzare i campi dell'oggetto corrente in cui l'espressione esistente o i campi di un altro oggetto collegato da un riferimento.

Un formato di slot è composto da un tempo di creazione seguito dal momento della creazione dell'oggetto, ad esempio @S3BackupLocation_2018-01-31T11:05:33.

È anche possibile consultare l'esatto ID slot specificato nella definizione della pipeline, ad esempio l'ID slot della posizione di backup Amazon S3. Per fare riferimento all'ID dello slot, utilizzare #{parent.@id}.

In questo esempio il campo filePath si riferisce al campo id nello stesso oggetto per creare un nome di file. Il valore di filePath restituisce "s3://mybucket/ExampleDataNode.csv".

{ "id" : "ExampleDataNode", "type" : "S3DataNode", "schedule" : {"ref" : "ExampleSchedule"}, "filePath" : "s3://mybucket/#{parent.@id}.csv", "precondition" : {"ref" : "ExampleCondition"}, "onFail" : {"ref" : "FailureNotify"} }

Per usare un campo esistente su un altro oggetto collegato da un riferimento, utilizzare la parola chiave node. Questa parola chiave è disponibile solo con allarmi e oggetti di precondizione.

Per continuare con l'esempio precedente, un'espressione in un SnsAlarm può fare riferimento alla data e all'intervallo di tempo in un Schedule, poiché S3DataNode si riferisce a entrambi.

Nello specifico, il campo message di FailureNotify può utilizzare i campi di runtime @scheduledStartTime e @scheduledEndTime di ExampleSchedule, poiché il campo onFail di ExampleDataNode fa riferimento a FailureNotify e il relativo campo schedule fa riferimento a 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" },
Nota

È possibile creare pipeline con dipendenze, ad esempio le attività nella pipeline che dipendono dal lavoro di altri sistemi o attività. Se la pipeline richiede alcune risorse, aggiungere tali dipendenze alla pipeline utilizzando le precondizioni associate ai nodi di dati e alle attività. In questo modo il debug della pipeline è più semplice e la pipeline stessa è più resiliente. Inoltre, mantenere le dipendenze all'interno di una singola pipeline quando è possibile, perché la risoluzione dei problemi in più pipeline è difficile.

Espressioni nidificate

AWS Data Pipeline ti consente di nidificare i valori per creare espressioni più complesse. Ad esempio, per eseguire un calcolo relativo al tempo (sottrarre 30 minuti da scheduledStartTime) e utilizzare il risultato in una definizione di pipeline, è possibile usare la seguente espressione in un'attività:

#{format(minusMinutes(@scheduledStartTime,30),'YYYY-MM-dd hh:mm:ss')}

e utilizzare il prefisso node se l'espressione è parte di un SnsAlarm o Precondizione:

#{format(minusMinutes(node.@scheduledStartTime,30),'YYYY-MM-dd hh:mm:ss')}

Elenchi

Le espressioni possono essere valutate su elenchi e su funzioni degli elenchi. Ad esempio, supponiamo che un elenco viene definito come il seguente: "myList":["one","two"]. Se l'elenco viene utilizzato nell'espressione#{'this is ' + myList}, valuterà["this is one", "this is two"]. Se si dispone di due elenchi, Data Pipeline finirà per appiattirli nella valutazione. Ad esempio, se myList1 è definito come [1,2] e myList2 è definito come [3,4], allora l'espressione [#{myList1}, #{myList2}] restituirà [1,2,3,4].

Espressione del nodo

AWS Data Pipeline utilizza l'espressione #{node.*} in SnsAlarm o PreCondition per un riferimento all'oggetto padre del componente della pipeline. Poiché SnsAlarm e PreCondition sono citati da un'attività o una risorsa senza alcun riferimento da parte loro, node fornisce il modo per consultare il referrer. Ad esempio, la seguente definizione di pipeline dimostra come una notifica di errore può utilizzare node per effettuare un riferimento al proprio padre, in questo caso ShellCommandActivity, e includere i tempi di inizio e di fine programmati nel messaggio SnsAlarm. Il riferimento scheduledStartTime su ShellCommandActivity non richiede il prefisso node perché scheduledStartTime fa riferimento a se stesso.

Nota

I campi preceduti dal segno AT (@) sono campi di runtime.

{ "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 supporta riferimenti transitivi per i campi definiti dall'utente, ma non per i campi di runtime. Un riferimento transitivo è un riferimento tra due componenti di pipeline che dipende da un altro componente di pipeline come intermediario. L'esempio seguente mostra un riferimento a un campo transitivo definito dall'utente e un riferimento a un campo di runtime non transitivo, entrambi validi. Per ulteriori informazioni, consultare Campi definiti dall'utente.

{ "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" }

Valutazione delle espressioni

AWS Data Pipeline fornisce un set di funzioni che è possibile utilizzare per calcolare il valore di un campo. L'esempio seguente utilizza la funzione makeDate per impostare il campo startDateTime di un oggetto Schedule su GMT/UTC "2011-05-24T0:00:00".

"startDateTime" : "makeDate(2011,5,24)"