如何更高效地查询AWS CodeArtifact仓库的总存储占用量?
更优的AWS CodeArtifact存储用量查询方法
针对你遇到的CodeArtifact存储用量查询效率问题,以下是几种更高效的解决方案:
1. 利用CloudWatch指标(推荐)
CodeArtifact会自动向CloudWatch推送StorageBytes指标,这是最直接且高效的查询方式,无需遍历所有资产:
- 控制台操作:
- 打开CloudWatch控制台,进入「指标」→「所有指标」
- 搜索
CodeArtifact并选择对应的指标命名空间 - 可按「Domain」(域)或「Repository」(仓库)维度筛选,查看对应范围的存储用量
- CLI命令:
替换aws cloudwatch get-metric-statistics \ --namespace AWS/CodeArtifact \ --metric-name StorageBytes \ --dimensions Name=Domain,Value=你的域名称 \ --start-time $(date -d "-7 days" +%Y-%m-%dT%H:%M:%SZ) \ --end-time $(date +%Y-%m-%dT%H:%M:%SZ) \ --period 86400 \ --statistics Maximum你的域名称即可获取该域最近7天的每日最大存储量;若需查看单个仓库,可添加维度Name=Repository,Value=你的仓库名称。
2. 通过Cost Explorer查看存储用量
由于你收到了超出免费额度的告警,Cost Explorer可直接关联计费与用量数据:
- 控制台操作:
- 打开Cost Explorer控制台,进入「使用量」页面
- 筛选服务为「CodeArtifact」,使用量类型选择「CodeArtifact Storage」
- 可按时间、域等维度查看存储用量趋势,数据与计费直接对应,便于核对告警原因
3. 优化原有遍历脚本
若必须通过API遍历资产,可通过并行处理大幅缩短耗时:
#!/bin/bash total_size=0 # 遍历所有域,并行处理每个域的仓库 aws codeartifact list-domains | jq -r ".domains[].name" | while read domain; do # 获取当前域的所有仓库,并行处理每个仓库 aws codeartifact list-repositories-in-domain --domain "$domain" | jq -r ".repositories[].name" | xargs -P 4 -I {} bash -c ' repo="{}" domain="$1" # 获取仓库内所有包,并行处理每个包 aws codeartifact list-packages --domain "$domain" --repository "$repo" | jq -r ".packages[].package" | xargs -P 8 -I {} bash -c " package=\"{}\" domain=\"$1\" repo=\"$2\" # 获取包的所有版本,并行处理每个版本 aws codeartifact list-package-versions --package \"$package\" --domain \"$domain\" --repository \"$repo\" --format pypi | jq -r ".versions[].version" | xargs -P 16 -I {} bash -c " version=\"{}\" domain=\"$1\" repo=\"$2\" package=\"$3\" # 计算当前版本的资产总大小 aws codeartifact list-package-version-assets --domain \"$domain\" --repo \"$repo\" --format pypi --package \"$package\" --package-version \"$version\" | jq -r ".assets[].size" | awk \"{sum += \$1} END {print sum}\" " "$domain" "$repo" "$package" " "$domain" "$repo" ' "$domain" | awk '{total += $1} END {print total}' done | awk '{total += $1} END {print "Total Artifactory Size: " $total}'
优化说明:
- 使用
xargs -P开启多进程并行处理,可根据你的AWS API并发限制调整进程数(如-P 4代表4个并行进程) - 用
awk直接汇总资产大小,避免bash循环求和的低效操作 - 移除中间文件写入,通过管道直接传递数据,减少IO开销
内容的提问来源于stack exchange,提问作者Rafaf Tahsin
相关产品推荐
相关产品推荐

