问题描述
我想使用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