我需要使用aws数据管道中的bash脚本调用ruby文件
我尝试使用命令args
使用shell命令活动> {
> "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"
> }
> ]
> }
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
帮我解决一下。
答案 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”。
希望这有帮助。