JMES路径:从AWS CLI结果中排除前5条记录

问题描述

我想使用AWS CLI获取RDS实例的可用快照列表。

我可以在使用此查询创建快照时按降序获得所有快照:

aws rds describe-db-snapshots --db-instance-identifier sample-db \
 --query="(reverse(sort_by(DBSnapshots[?Snapshottype=='manual'],&SnapshotCreateTime)))[*].{DBSnapshotIdentifier: DBSnapshotIdentifier,DBSnapshotARN: DBSnapshotArn,SnapshotCreateTime: SnapshotCreateTime}" \
 --no-paginate --output json

通过将[*]替换为[:5],我还可以从该查询获取前5条记录

aws rds describe-db-snapshots --db-instance-identifier sample-db \
 --query="(reverse(sort_by(DBSnapshots[?Snapshottype=='manual'],&SnapshotCreateTime)))[:5].{DBSnapshotIdentifier: DBSnapshotIdentifier,SnapshotCreateTime: SnapshotCreateTime}" \
 --no-paginate --output json

但是,我想获取所有记录(,但前5名除外)。我将不胜感激JMES Path上关于如何实现此目标的任何投入。

解决方法

您要实现的目标称为slicing,实际上您与试用版非常接近解决方案。

JMESPath的切片语法是从Python世界借来的,如下所示:

此语法引入了允许开始的Python样式数组切片 位置,停止位置和步骤。该语法还建议如下 语义与python slices相同。

[start:stop:step]

表达式的每个部分都是可选的。您可以省略开始 位置,停止位置或步骤。不能超过三个值 在切片表达式中提供。

step值确定在每个元素之后我的索引如何跳过 从阵列中拔出。步骤1(默认步骤)不会跳过 任何索引。步进值为2将跳过其他所有索引,而 从数组中获取值。值为-1的步长将提取值 从数组中以相反的顺序。步进值-2将提取 值从数组中以相反的顺序排列,同时互相跳过 索引。

来源:https://jmespath.org/proposals/array-slices.html#syntax

因此,您的查询应为[5:],以指示您希望切片在第五个元素之后开始,并以:

结尾
aws rds describe-db-snapshots --db-instance-identifier sample-db \
 --query="(reverse(sort_by(DBSnapshots[?SnapshotType=='manual'],&SnapshotCreateTime)))[5:].{DBSnapshotIdentifier: DBSnapshotIdentifier,DBSnapshotARN: DBSnapshotArn,SnapshotCreateTime: SnapshotCreateTime}" \
 --no-paginate --output json