Python AWS ECR列表图像结果有一个奇怪的顺序

Python AWS ECR列表图像结果有一个奇怪的顺序,python,amazon-web-services,boto3,aws-sdk,amazon-ecr,Python,Amazon Web Services,Boto3,Aws Sdk,Amazon Ecr,我试图通过使用从AWS ECR获取最近5次推送的图像列表。然而,我观察到结果的顺序并不是我所期望的 例如: 我有一个ECR存储库一些服务,它有以下标签:0.1.0,0.2.00.6.0,0.6.1,它们一直按时间顺序推送 当我试图列出图像的标签时,AWS ECR不知何故给了我一个奇怪的顺序 $aws ecr列表图像--存储库名称某些服务| jq'.ImageID[]|.imageTag' "0.3.0" "0.6.1" "0.3.1" "0.2.0" "0.6.2" "0.6.0" "0.4.0

我试图通过使用从AWS ECR获取最近5次推送的图像列表。然而,我观察到结果的顺序并不是我所期望的

例如:

我有一个ECR存储库
一些服务
,它有以下标签:
0.1.0
0.2.0
<代码>0.6.0,
0.6.1
,它们一直按时间顺序推送

当我试图列出图像的标签时,AWS ECR不知何故给了我一个奇怪的顺序

$aws ecr列表图像--存储库名称某些服务| jq'.ImageID[]|.imageTag'
"0.3.0"
"0.6.1"
"0.3.1"
"0.2.0"
"0.6.2"
"0.6.0"
"0.4.0"
"0.1.0"
"0.5.0"
当我尝试使用
maxResults
时,它始终产生了效果:

$aws ecr列表图像--最大结果5--存储库名称某些服务| jq'.ImageID[]|.imageTag'
"0.3.0"
"0.6.1"
"0.3.1"
"0.2.0"
"0.6.2"
顺序似乎与事实相符。我试图查看API使用哪些数据作为排序键,但找不到任何数据

$aws ecr描述图像--最大结果5\
--存储库命名一些服务\
|jq'.imageDetails[]|{imageTags,imageDigest,imageSizeInBytes,imagePushedAt}'
{
“图像标签”:[
"0.3.0"
],
“imageDigest”:“sha256:4497e8d…”,
“imageSizeInBytes”:190502899,
“imagePushedAt”:“2020-05-20T15:58:32+07:00”
}
{
“图像标签”:[
"0.6.1"
],
“imageDigest”:“sha256:45a1be8…”,
“imageSizeInBytes”:218137213,
“imagePushedAt”:“2020-07-27T18:48:05+07:00”
}
{
“图像标签”:[
"0.3.1"
],
“图像摘要”:“sha256:4b96a8ab…”,
“imageSizeInBytes”:190502957,
“imagePushedAt”:“2020-06-18T17:30:52+07:00”
}
{
“图像标签”:[
"0.2.0"
],
“图像摘要”:“sha256:168e14fb6…”,
“imageSizeInBytes”:193764109,
“imagePushedAt”:“2020-05-11T18:57:26+07:00”
}
{
“图像标签”:[
"0.6.2"
],
“imageDigest”:“sha256:2f24f…”,
“imageSizeInBytes”:218146252,
“imagePushedAt”:“2020-08-06T19:43:00+07:00”
}
  • 有人知道AWS ECR API如何对图像进行排序吗
  • 有没有一种方法可以在不使用
    --query
    的情况下实现我想要的功能(因为我实际上使用的是AWS Python SDK来完成这项任务)
更新

我已经用Python和boto3实现了。由于顺序不确定,我不得不使用
natsort
对Docker图像标签进行排序

from dataclasses import dataclass
from natsort import natsorted

@dataclass
class EcrRepository:
    name: str
    repository_arn: str


@dataclass
class EcrImage:
    repository: EcrRepository
    digest: str
    tags: List[str]
    
__ecr_client: "boto3_ecr.Client" = get_ecr_client()

def get_last_tagged_images(ecr_repository: EcrRepository) -> List[EcrImage]:

        list_image_response = __ecr_client.describe_images(
         repositoryName=ecr_repository.name, filter={"tagStatus": "TAGGED"},
        )

        return natsorted(
            [
                EcrImage(
                    repository=ecr_repository,
                    digest=img.get("imageDigest"),
                    tags=img.get("imageTags")
                )
                for img in list_image_response.get("imageDetails", [])
            ],
            key=lambda i: i.tags,
            reverse=True,
        )
非常感谢您抽出时间


Genzer

这回答了你的问题吗?嗨@Amit Baranes,这是我问的第一个问题。太糟糕了,这不是我想要的答案。@Genzer你能分享你的AWS Python SDK让我们看看吗?您刚刚向我们展示了AWS CLI代码。您好@Bernardo Duarte,我发布了我在项目中使用的Python代码片段。在同一天,我也在AWS论坛上发布了一个问题,但直到现在还没有答案。