列出指定日期之后拍摄的所有 AWS Elasticache 快照

问题描述 投票:0回答:1

我正在尝试在 AWS CLI 中编写一个查询,它将提供早于特定创建日期的 Elasticache 快照名称。

我尝试使用 JMESPath 查询,例如:

aws elasticache describe-snapshots \
  --region ap-southeast-1 \
  --snapshot-source "manual" \
  --query 'Snapshots[*].NodeSnapshots[?SnapshotCreateTime >`2022-10-01`] | [?not_null(node)]'

但是,这给了我一个空结果。

aws elasticache describe-snapshots
的片段:

{
    "Snapshots": [{
        "SnapshotName": "snapshot-name",
        "ReplicationGroupId": "rep-id",
        "ReplicationGroupDescription": "redis  cluster",
        "CacheClusterId": null,
        "SnapshotStatus": "available",
        "SnapshotSource": "automated",
        "CacheNodeType": "cache.r6g.large",
        "Engine": "redis",
        "EngineVersion": "6.0.5",
        "NumCacheNodes": null,
        "PreferredAvailabilityZone": null,
        "CacheClusterCreateTime": null,
        "PreferredMaintenanceWindow": "sun:20:00-sun:20:00",
        "TopicArn": null,
        "Port": "6379",
        "CacheParameterGroupName": "default.redis6.x.cluster.on",
        "CacheSubnetGroupName": "redis-group",
        "VpcId": "vpc-01bcajghfghj",
        "AutoMinorVersionUpgrade": "true",
        "SnapshotRetentionLimit": "18",
        "SnapshotWindow": "20:00-21:00",
        "NumNodeGroups": "1",
        "AutomaticFailover": "enabled",
        "NodeSnapshots": [{
            "CacheClusterId": "redis-cluster-01",
            "NodeGroupId": "001",
            "CacheNodeId": "001",
            "NodeGroupConfiguration": null,
            "CacheSize": "20 GB",
            "CacheNodeCreateTime": "1632909889675",
            "SnapshotCreateTime": "1667246439000"
        }],
        "KmsKeyId": "kms-id.."
    }]
}
amazon-web-services redis amazon-elasticache jmespath
1个回答
0
投票

如果我们以文档中给出的 JSON 为例:

{ "Snapshots": [ { "SnapshotName": "automatic.my-cluster2-002-2019-12-05-06-38", "NodeSnapshots": [ { "CacheNodeId": "0001", "SnapshotCreateTime": "2019-12-05T06:38:23Z" } ] }, { "SnapshotName": "myreplica-backup", "NodeSnapshots": [ { "CacheNodeId": "0001", "SnapshotCreateTime": "2019-11-26T00:25:01Z" } ] }, { "SnapshotName": "my-cluster", "NodeSnapshots": [ { "CacheNodeId": "0001", "SnapshotCreateTime": "2019-11-26T03:08:33Z" } ] } ] }
然后,您可以意识到您需要对嵌套在数组

SnapshotCreateTime

下的
NodeSnapshots
进行过滤。

所以,您需要的是双重过滤器:

    按日期过滤:
  • [?SnapshotCreateTime > `2022-10-01`]
    
    
  • 然后,排除
  • NodeSnapshots
     数组已被上一个过滤器清空的所有快照:
    
    [?NodeSnapshots[?SnapshotCreateTime > `2022-10-01`]]
    
    
因此,如果您只关心快照的名称,则可以使用查询:

Snapshots[?NodeSnapshots[?SnapshotCreateTime > `2022-10-01`]].SnapshotName
所以,你的命令最终是:

aws elasticache describe-snapshots \ --region ap-southeast-1 \ --snapshot-source "manual" \ --query 'Snapshots[? NodeSnapshots[?SnapshotCreateTime > `2022-10-01`] ].SnapshotName'


现在,您在问题中显示为输出,您的问题还来自于这样一个事实:您的

SnapshotCreateTime

epoch 格式,以秒为单位,因此您只需以正确的格式转换 2022-10-01
 .

如果您使用的是 Linux,则可以在命令中使用

date

:
执行此操作

aws elasticache describe-snapshots \ --region ap-southeast-1 \ --snapshot-source "manual" \ --query "Snapshots[? NodeSnapshots[? SnapshotCreateTime > \`$(date --date='2022-10-01' +'%s')000\` ] ].SnapshotName"
    
© www.soinside.com 2019 - 2024. All rights reserved.