需要在aws datapipeline中运行bash脚本

时间:2013-08-01 16:27:00

标签: ruby amazon-web-services amazon-data-pipeline

我需要使用aws数据管道中的bash脚本调用ruby文件

我尝试使用命令args

使用shell命令活动

json文件

> {
>       "objects": [
>         {
>           "terminateAfter": "1 Hours",
>           "id": "ResourceId5",
>           "schedule": {
>             "ref": "ScheduleId4"
>           },
>           "name": "Resource1",
>           "logUri": "s3://pipeline_test/output1/",
>           "type": "Ec2Resource"
>         },
>         {
>           "id": "ActivityId1",
>           "schedule": {
>             "ref": "ScheduleId4"
>           },
>           "name": "Shell",
>           "command": "bash -lc 'cd ~/pipeline_test/inputs/ && ruby sample.rb'", # bash command script path for ruby file
>           "runsOn": {
>             "ref": "ResourceId5"
>           },
>           "type": "ShellCommandActivity",
>           "output": {
>             "ref": "DataNodeId3"
>           }
>         },
>         {
>           "id": "DataNodeId3",
>           "schedule": {
>             "ref": "ScheduleId4"
>           },
>           "directoryPath": "s3://pipeline_test/output/",
>           "name": "Output",
>           "type": "S3DataNode"
>         },
>         {
>           "id": "Default",
>           "scheduleType": "timeseries",
>           "name": "Default",
>           "role": "DataPipelineDefaultRole",
>           "resourceRole": "DataPipelineDefaultResourceRole"
>         },
>         {
>           "id": "ScheduleId4",
>           "startDateTime": "2013-08-01T00:00:00",
>           "name": "schedule",
>           "type": "Schedule",
>           "period": "20 Minutes",
>           "endDateTime": "2013-08-03T00:00:00"
>         }
>       ]
>     }

sample.rb

f = File.open('text.txt', 'a+')
old_out = $stdout
$stdout = f
puts "Start time #{Time.now}"
puts "Welcome"
puts "End time #{Time.now}"
f.close

我不知道如何给出s3路径(“命令”:“bash -lc'cd~ / pipeline_test(bucket_name)/ inputs /&& ruby​​ sample.rb'”, )

我正在获取脚本退出状态1

帮我解决一下。

1 个答案:

答案 0 :(得分:2)

实现这一目标的一种方法是使用包装器shell脚本,类似于下面调用“sample.rb”。

$INPUT1_STAGING_DIR/sample.rb >> $OUTPUT1_STAGING_DIR/output.txt

现在,您可以指定“脚本Uri”,而不是指定“命令”,指向S3中的shell脚本。

您还应该启用“Stage = true”,并使Input datanode指向包含sample.rb脚本的s3文件夹。

有关分段的详细信息,请参见here

您需要修改sample.rb并使用相应的路径,例如“$ INPUT1_STAGING_DIR / text.txt”而不是“text.txt”。

希望这有帮助。