从Java获取当前的AWS Data Pipeline状态

时间:2019-12-18 10:43:39

标签: java amazon-web-services aws-data-pipeline

我正在尝试从Java Data Pipeline客户端访问数据管道的当前状态。我的用例是激活管道并等待其完成。 我尝试了以下线程的答案:AWS Data Pipeline - Components, Instances and Attempts and Pipeline Status,但是即使管道处于运行状态,我也只能按计划获得当前状态。这是我的代码段:

DescribePipelinesRequest describePipelinesRequest = new DescribePipelinesRequest();
    describePipelinesRequest.setPipelineIds(Arrays.asList(pipelineId));
    final DescribePipelinesResult describePipelinesResult =
        dataPipelineClient.describePipelines(describePipelinesRequest);
    final List<Field> testPipeline =
        describePipelinesResult.getPipelineDescriptionList().get(0).getFields();
    for (Field field : testPipeline) {
      log.debug("Field: {} and {}", field.getKey(), field.getStringValue());
      if (field.getKey().equals("@pipelineState")) {
        log.debug("Pipeline state current: {} and {}", field.getStringValue());
      }
    }

以前有人遇到过这样的问题吗?顺便说一句,该管道已成为计划每100年运行的触发管道。我们需要手动触发该管道。

1 个答案:

答案 0 :(得分:1)

我不确定这是否能满足您的要求,但应该有助于您找到正确的方向。您将需要查询管道中的对象并获取它们的状态。这些是实际正在运行的。

Java代码

String pipelineid = "df-06036888777666777";//replace with your pipeline id
DataPipelineClient client = new DataPipelineClient();
QueryObjectsResult tasks = client.queryObjects( new QueryObjectsRequest().withPipelineId(pipelineid).withSphere("INSTANCE"));
DescribeObjectsResult results = client.describeObjects(new DescribeObjectsRequest().withObjectIds(tasks.getIds()).withPipelineId(pipelineid));

for (PipelineObject obj : results.getPipelineObjects()){
    for (Field field : obj.getFields()){
        if (field.getKey().equals("@status") && !field.getStringValue().equals("FINISHED") ){
            System.out.println(obj.getName() + " is still running...");
        }
    }
}

输出

@CliActivity_2020-01-11T21:34:45 is still running...
@Ec2Instance_2020-01-11T21:34:45 is still running...

您当前正在做的事情是获取管道信息,该信息只会显示已成功创建并已计划。

我们需要手动触发此管道。

为此,请再次激活管道。这将创建数据管道将开始处理的新任务对象。目前,如上所述,这是一个按需管道,仅在手动激活时才创建新任务。