Python AWS ECR列表图像结果有一个奇怪的顺序
我试图通过使用从AWS ECR获取最近5次推送的图像列表。然而,我观察到结果的顺序并不是我所期望的 例如: 我有一个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
一些服务
,它有以下标签: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如何对图像进行排序吗
- 有没有一种方法可以在不使用
的情况下实现我想要的功能(因为我实际上使用的是AWS Python SDK来完成这项任务)--query
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论坛上发布了一个问题,但直到现在还没有答案。