如何在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
相关产品推荐
相关产品推荐

