Expresiones - AWS Data Pipeline

AWS Data Pipeline ya no está disponible para nuevos clientes. Clientes actuales de AWS Data Pipeline pueden seguir utilizando el servicio con normalidad. Más información

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Expresiones

Las expresiones le permiten compartir un valor entre objetos relacionados. El servicio web AWS Data Pipeline procesa las expresiones en tiempo de ejecución, lo que garantiza que todas las expresiones se sustituyan por el valor de la expresión.

Las expresiones están delimitadas por: "#{" y "}". Puede utilizar una expresión en cualquier objeto de definición de canalización donde una cadena sea legal. Si un slot es una referencia o de tipo ID, NAME, TYPE o SPHERE, su valor no se evalúa y se utiliza literalmente.

La siguiente expresión llama a una de las funciones de AWS Data Pipeline. Para obtener más información, consulte Evaluación de expresiones.

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

Objetos y campos de referencia

Las expresiones pueden utilizar campos del objeto actual en el que existe la expresión o los campos de otro objeto que está vinculado mediante una referencia.

Un formato de slot consta de una hora de creación, seguida de la hora de creación del objeto, como @S3BackupLocation_2018-01-31T11:05:33.

También puede hacer referencia al ID de slot exacto especificado en la definición de la canalización; por ejemplo, el ID de slot de la ubicación de copia de seguridad de Amazon S3. Para hacer referencia al ID de slot, utilice #{parent.@id}.

En el siguiente ejemplo, el campo filePath hace referencia al campo id en el mismo objeto para formar un nombre de archivo. El valor de filePath se evalúa como "s3://mybucket/ExampleDataNode.csv".

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

Para utilizar un campo que existe en otro objeto vinculado mediante una referencia, utilice la palabra clave node. Esta palabra clave solo está disponible con objetos de alarma y condición previa.

Continuando con el ejemplo anterior, una expresión de una SnsAlarm puede hacer referencia al rango de fecha y hora de una Schedule, porque S3DataNode hace referencia a ambas.

En concreto, el campo message de FailureNotify puede utilizar los campos en tiempo de ejecución @scheduledStartTime y @scheduledEndTime desde ExampleSchedule, porque el campo onFail de ExampleDataNode hace referencia a FailureNotify y su campo schedule hace referencia 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

Puede crear canalizaciones que tengan dependencias, como las tareas de la canalización que dependen del trabajo de otros sistemas o tareas. Si la canalización necesita determinados recursos, añada esas dependencias a la canalización con condiciones previas que se asociarán a los nodos de datos y las tareas. Esto hace que las canalizaciones sean más fáciles de depurar y más resistentes. Además, mantenga las dependencias dentro de una única canalización cuando sea posible, ya que es difícil solucionar problemas entre canalizaciones.

Expresiones anidadas

AWS Data Pipeline le permite anidar valores para crear expresiones más complejas. Por ejemplo, para realizar un cálculo de tiempo (restar 30 minutos de scheduledStartTime) y formatear el resultado para utilizarlo en una definición de canalización, puede utilizar la siguiente expresión en una actividad:

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

y utilizando el prefijo node si la expresión forma parte de una SnsAlarm o Precondition:

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

Lists

Las expresiones pueden evaluarse en listas y funciones en listas. Por ejemplo, supongamos que una lista se define de la siguiente forma: "myList":["one","two"]. Si esta lista se utiliza en la expresión #{'this is ' + myList}, se evaluará en ["this is one", "this is two"]. Si tiene dos listas, Data Pipeline al final las nivela en su evaluación. Por ejemplo, si myList1 se define como [1,2] y myList2 se define como [3,4], la expresión [#{myList1}, #{myList2}] se evalúa en [1,2,3,4].

Expresión de nodo

AWS Data Pipeline utiliza la expresión #{node.*} en SnsAlarm o PreCondition como referencia al objeto principal de un componente de la canalización. Dado que se hace referencia a SnsAlarm y PreCondition desde una actividad o recurso sin ninguna referencia de vuelta desde ellos, node proporciona la manera de hacer referencia al remitente. Por ejemplo, la siguiente definición de canalización demuestra cómo una notificación de error puede utilizar node para hacer referencia a su principal, en este caso ShellCommandActivity, e incluye las horas de inicio y finalización programadas del principal en el mensaje SnsAlarm. La referencia scheduledStartTime de ShellCommandActivity no necesita el prefijo node porque scheduledStartTime hace referencia a sí mismo.

nota

Los campos precedidos por el signo AT (@) indican que esos campos son campos de tiempo de ejecución.

{ "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 admite referencias transitivas para los campos definidos por el usuario, pero no para los campos de tiempo de ejecución. Una referencia transitiva es una referencia entre dos componentes de la canalización que dependen de otro componente de la canalización como intermediario. El siguiente ejemplo muestra una referencia a un campo definido por el usuario transitivo y una referencia a un campo en tiempo de ejecución no transitivo, ambos válidos. Para obtener más información, consulte Campos definidos por el usuario.

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

Evaluación de expresiones

AWS Data Pipeline proporciona un conjunto de funciones que se pueden utilizar para calcular el valor de un campo. En el siguiente ejemplo, se utiliza la función makeDate para establecer el campo startDateTime de un objeto Schedule en "2011-05-24T0:00:00" GMT/UTC.

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