AWS Data Pipeline
開発者ガイド (API バージョン 2012-10-29)

式を使用すると、関連するオブジェクト間で値を共有できます。式は実行時に AWS Data Pipeline ウェブサービスによって処理され、すべての式に式の値が代入されます。

式は "#{" と "}" で区切られます。文字列が有効である、任意のパイプライン定義オブジェクトで式を使用できます。スロットが参照であるか、タイプ ID、NAME、TYPE、SPHERE のいずれかであれば、値は評価されず、逐語的に使用されます。

次の式は、AWS Data Pipeline 関数の 1 つを呼び出します。詳細については、「式の評価」を参照してください。

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

フィールドとオブジェクトの参照

式では、式が含まれる現在のオブジェクトのフィールドを使用したり、参照によってリンクされている別のオブジェクトのフィールドを使用したりすることができます。

スロットの形式は、作成時間に続いてオブジェクトの作成時間 (@S3BackupLocation_2018-01-31T11:05:33 など) で構成されます。

パイプライン定義で指定された正確なスロット ID (Amazon S3 バックアップ場所のスロット ID など) を参照することもできます。スロット ID を参照するには、#{parent.@id} を使用します。

次の例では、filePath フィールドは同じオブジェクトの id フィールドを参照してファイル名を形成します。値 filePath は「s3://mybucket/ExampleDataNode.csv」に評価されます。

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

参照によってリンクされる別のオブジェクトに存在するフィールドを使用するには、node キーワードを使用します。このキーワードはアラームおよび前提条件のオブジェクトでのみ使用できます。

引き続き前の例で説明すると、SnsAlarm 内の式で Schedule 内の日時の範囲を参照できます。これは、S3DataNode が両方を参照しているためです。

具体的には、FailureNotifymessage フィールドでExampleSchedule@scheduledStartTime および @scheduledEndTime 実行時フィールドを使用できます。これは、ExampleDataNodeonFail フィールドが FailureNotify を参照し、その schedule フィールドが 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" },

注記

他のシステムまたはタスクの作業に依存するパイプライン内のタスクなど、依存関係を持つパイプラインを作成できます。パイプラインで特定のリソースが必要な場合、データノードやタスクに関連付ける前提条件を使用して、それらの依存関係をパイプラインに追加します。これにより、パイプラインはデバッグが容易になり、柔軟性が高くなります。さらに、複数のパイプラインにまたがるトラブルシューティングは困難であるため、可能な場合は依存関係を 1 つのパイプライン内に維持します。

入れ子式

AWS Data Pipeline では、より複雑な式を作成するために値を入れ子にすることができます。たとえば、時間の計算 (scheduledStartTime から 30 分を引く) を行い、結果の書式を設定してパイプライン定義で使用するには、アクティビティで次の式を使用できます。

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

さらに、式が SnsAlarm または前提条件の一部である場合は、node プレフィックスを使用します。

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

リスト

式はリストやリストを指定した関数に対して評価できます。たとえば、"myList":["one","two"] のようにリストが定義されているとします。このリストが #{'this is ' + myList} という式で使用された場合、["this is one", "this is two"] に評価されます。2 つのリストがある場合、Data Pipeline による評価では、最終的に平坦化されます。たとえば、myList1[1,2] として定義され、myList2[3,4] として定義されている場合、式 [#{myList1}, #{myList2}] は、[1,2,3,4] に評価されます。

ノード式

AWS Data Pipeline では、パイプラインコンポーネントの親オブジェクトへの後方参照として、SnsAlarm または PreCondition#{node.*} 式を使用します。SnsAlarm および PreCondition は、後方参照なしにアクティビティやリソースから参照されるため、node はリファラーを参照する方法を提供します。たとえば、次のパイプライン定義は、失敗通知で node を使用してその親(この場合は ShellCommandActivity)を参照し、親の予定された開始時刻と終了時刻を SnsAlarm メッセージに含める方法を示しています。ShellCommandActivity の scheduledStartTime 参照は、scheduledStartTime がそれ自体を参照するため、node プレフィックスは必要ではありません。

注記

先頭にアットマーク(@)がついているフィールドは、そのフィールドが実行時フィールドであることを示しています。

{ "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 は、ユーザー定義フィールドについては推移的参照をサポートしていますが、実行時フィールドについてはサポートしていません。推移的参照は、仲介として別のパイプラインコンポーネントに依存する 2 つのパイプラインコンポーネント間の参照です。次の例は、推移的なユーザー定義フィールドへの参照と、推移的ではない実行時フィールドへの参照を示しています。これらの参照はいずれも有効です。詳細については、「ユーザー定義フィールド」を参照してください。

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

式の評価

AWS Data Pipeline には、フィールドの値を計算するために使用できる一連の関数が用意されています。次の例では、makeDate 関数を使用して、Schedule オブジェクトの startDateTime フィールドを、"2011-05-24T0:00:00" GMT/UTC に設定します。

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