Expressões - AWS Data Pipeline

Expressões

Com as expressões, é possível compartilhar um valor nos objetos relacionados. As expressões são processadas pelo serviço web do AWS Data Pipeline no tempo de execução, o que garante que todas elas sejam substituídas pelo valor da expressão.

As expressões são delimitadas por "#{" e "}". Você pode usar uma expressão em qualquer objeto de definição de pipeline em que uma string é válida. Se um slot for uma referência ou destes tipos: ID, NAME, TYPE ou SPHERE, o valor dele não será avaliado nem usado textualmente.

A expressão a seguir chama uma das funções do AWS Data Pipeline. Para obter mais informações, consulte Avaliação de expressões.

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

Referenciar campos e objetos

As expressões podem usar campos do objeto atual em que a expressão existe ou campos de outro objeto vinculado por uma referência.

Um slot consiste em uma data de criação seguida pelo horário de criação do objeto, como @S3BackupLocation_2018-01-31T11:05:33.

Você também pode fazer referência ao ID do slot exato especificado na definição do pipeline, como o ID do slot do local de backup do Amazon S3. Para fazer referência ao ID do slot, use #{parent.@id}.

No exemplo a seguir, o campo filePath faz referência ao campo id no mesmo objeto para formar um nome de arquivo. O valor de filePath é avaliado para "s3://mybucket/ExampleDataNode.csv".

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

Para usar um campo que existe em outro objeto vinculado por uma referência, use a palavra-chave node. Essa palavra-chave só está disponível com objetos de alarme e precondição.

Continuando com o exemplo anterior, uma expressão em SnsAlarm pode fazer referência ao intervalo de data e de hora em Schedule, pois S3DataNode faz referência a ambas.

Especificamente, o campo message de FailureNotify pode usar os campos de tempo de execução @scheduledStartTime e @scheduledEndTime de ExampleSchedule, pois o campo onFail do ExampleDataNode faz referência a FailureNotify e seu respectivo campo schedule faz referência 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

Você pode criar pipelines com dependências, por exemplo, tarefas no seu pipeline que dependem do trabalho de outros sistemas ou de outras tarefas. Se o pipeline exigir determinados recursos, adicione essas dependências a ele usando precondições associadas a nós de dados e a tarefas. Isso faz com que os pipelines sejam depurados com mais facilidade e sejam mais resilientes. Além disso, mantenha suas dependências em um único pipeline sempre que possível, pois é difícil solucionar problemas em entre vários pipelines.

Expressões aninhadas

O AWS Data Pipeline permite o uso de valores aninhados para criar expressões mais complexas. Por exemplo, para executar um cálculo de tempo (subtrair 30 minutos de scheduledStartTime) e formatar o resultado para usar em uma definição de pipeline, você pode usar a seguinte expressão em uma atividade:

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

e usar o prefixo node se a expressão for parte de um SnsAlarm ou de uma precondição:

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

Listas

As expressões podem ser avaliadas em listas e em funções nas listas. Por exemplo, suponha que uma lista seja definida da seguinte maneira: "myList":["one","two"]. Se essa lista for usada na expressão #{'this is ' + myList}, ela será avaliada como ["this is one", "this is two"]. Se você tiver duas listas, o Data Pipeline as nivelará na avaliação. Por exemplo, se myList1 for definida como [1,2] e myList2 como [3,4], a expressão [#{myList1}, #{myList2}] será avaliada como [1,2,3,4].

Expressão de nó

O AWS Data Pipeline usa a expressão #{node.*} em SnsAlarm ou PreCondition para referência inversa ao objeto principal de um componente do pipeline. Como SnsAlarm e PreCondition são referenciados a partir de uma atividade ou um recurso sem referência inversa, node fornece uma forma consultar o indicador. Por exemplo, a definição do pipeline a seguir demonstra como uma notificação de falha pode usar o node para fazer referência ao nó principal, neste caso ShellCommandActivity, e incluir as horas de início e término programadas desse nó principal na mensagem do SnsAlarm. A referência scheduledStartTime em ShellCommandActivity não requer o prefixo node, pois scheduledStartTime faz referência própria.

nota

O sinal @ (arroba) que precede os campos indica que eles são campos de tempo de execução.

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

O AWS Data Pipeline oferece suporte a referências transitivas para campos definidos pelo usuário, mas não para campos de tempo de execução. Uma referência transitiva é uma referência entre dois componentes de pipeline que dependem de outro componente de pipeline como intermediário. O exemplo a seguir mostra uma referência a um campo transitivo definido por usuário e uma referência a um campo não transitivo de tempo de execução, ambos válidos. Para obter mais informações, consulte Campos definidos pelo usuário.

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

Avaliação de expressões

O AWS Data Pipeline fornece um conjunto de funções que você pode usar para calcular o valor de um campo. O exemplo a seguir usa a função makeDate para definir o campo startDateTime de um objeto Schedule como "2011-05-24T0:00:00" GMT/UTC.

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