You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS PHP SDK V3中查询匹配多状态的AWS Batch作业?

解决AWS Batch多状态作业查询问题

在AWS PHP SDK中使用BatchClient的listJobs()方法查询多个未完成状态的作业时,不能用管道分隔状态值,之前用filters返回空结果是因为参数格式不正确,以下是两种可行的解决方案:

方法一:循环调用接口合并结果

jobStatus参数一次仅支持传入单个状态值,因此可以遍历目标状态列表,分别调用接口后合并结果:

<?php
use Aws\Batch\BatchClient;

// 初始化Batch客户端
$batchClient = new BatchClient([
    'region' => '你的区域标识',
    'version' => 'latest',
    // 其他必要配置,如凭证等
]);

// 定义需要查询的未完成作业状态
$targetStatuses = ['SUBMITTED', 'PENDING', 'RUNNABLE', 'STARTING', 'RUNNING'];
$allUnfinishedJobs = [];

foreach ($targetStatuses as $status) {
    // 首次调用获取当前状态的作业
    $result = $batchClient->listJobs([
        'jobQueue' => '你的作业队列名称', // 必填参数,指定要查询的作业队列
        'jobStatus' => $status
    ]);
    
    // 合并当前状态的作业列表
    if (!empty($result['jobSummaryList'])) {
        $allUnfinishedJobs = array_merge($allUnfinishedJobs, $result['jobSummaryList']);
    }
    
    // 处理分页:如果结果超过1000条,通过nextToken获取后续数据
    while (isset($result['nextToken'])) {
        $result = $batchClient->listJobs([
            'jobQueue' => '你的作业队列名称',
            'jobStatus' => $status,
            'nextToken' => $result['nextToken']
        ]);
        
        if (!empty($result['jobSummaryList'])) {
            $allUnfinishedJobs = array_merge($allUnfinishedJobs, $result['jobSummaryList']);
        }
    }
}

// $allUnfinishedJobs即为所有目标状态的作业集合
?>

方法二:正确使用filters参数

使用filters时需严格遵循AWS API的格式要求,将状态数组放入values中,name指定为JOB_STATUS:

<?php
use Aws\Batch\BatchClient;

$batchClient = new BatchClient([
    'region' => '你的区域标识',
    'version' => 'latest',
    // 其他必要配置
]);

// 首次调用查询多状态作业
$result = $batchClient->listJobs([
    'jobQueue' => '你的作业队列名称',
    'filters' => [
        [
            'name' => 'JOB_STATUS',
            'values' => ['SUBMITTED', 'PENDING', 'RUNNABLE', 'STARTING', 'RUNNING']
        ]
    ]
]);

$allUnfinishedJobs = $result['jobSummaryList'] ?? [];

// 处理分页逻辑
while (isset($result['nextToken'])) {
    $result = $batchClient->listJobs([
        'jobQueue' => '你的作业队列名称',
        'filters' => [
            [
                'name' => 'JOB_STATUS',
                'values' => ['SUBMITTED', 'PENDING', 'RUNNABLE', 'STARTING', 'RUNNING']
            ]
        ],
        'nextToken' => $result['nextToken']
    ]);
    
    $allUnfinishedJobs = array_merge($allUnfinishedJobs, $result['jobSummaryList'] ?? []);
}
?>

注意事项

  • 必须指定jobQueue参数,否则接口会报错或返回不完整结果。
  • 当作业数量超过1000条时,必须通过nextToken循环获取后续批次的结果,避免数据遗漏。
  • 确保当前AWS身份已配置batch:ListJobs的IAM权限,否则会返回权限错误。

内容的提问来源于stack exchange,提问作者space97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 23:35:21