如何清理CodeArtifact多包冗余 或设置pip仅指定包走CodeArtifact源
CodeArtifact使用问题解决方案
1. 简便的CodeArtifact批量清理方法
CodeArtifact控制台暂不支持批量删除包,可通过以下两种方案实现清理:
- 方案1:AWS CLI批量删除
提前配置好具有codeartifact:ListPackages、codeartifact:DeletePackageVersions权限的AWS CLI凭证,执行对应命令操作:- 列出仓库中所有来自公共源的Python包:
aws codeartifact list-packages --domain <CodeArtifact域名> --domain-owner <AWS账户ID> --repository <仓库名> --format pypi --origin-type PUBLIC - 删除指定公共包的所有版本:
aws codeartifact delete-package-versions --domain <CodeArtifact域名> --domain-owner <AWS账户ID> --repository <仓库名> --format pypi --package <待删包名> --versions $(aws codeartifact list-package-versions --domain <CodeArtifact域名> --domain-owner <AWS账户ID> --repository <仓库名> --format pypi --package <待删包名> --query 'versions[*].version' --output text) - 如需批量删除所有公共源同步的包,可将上述命令组合为Shell循环执行,执行前建议加
--dry-run参数预览删除列表,避免误删私有包。
- 列出仓库中所有来自公共源的Python包:
- 方案2:生命周期规则自动清理(更推荐)
直接在CodeArtifact仓库配置中添加生命周期规则,筛选来源为公共源的包,设置保留时长或保留最新版本数量,规则生效后会自动清理过期的公共同步包,无需手动操作。
2. pip仅指定包从CodeArtifact拉取的实现方法
可以从根源避免公共依赖同步到CodeArtifact占用存储,常用两种实现方式:
- 方式1:requirements.txt单独指定私有包源
公共依赖正常声明,仅给私有包指定CodeArtifact源地址,示例如下:
执行# 公共依赖默认走官方源 requests==2.31.0 pandas==2.1.4 # 私有包单独指定CodeArtifact源 your-private-pkg @ https://<域>-<账户ID>.d.codeartifact.<区域>.amazonaws.com/pypi/<仓库名>/simple/your-private-pkg/pip install -r requirements.txt即可,公共依赖会直接从PyPI官方源拉取,不会经过CodeArtifact。 - 方式2:全局pip配置优先级控制
在pip配置文件(pip.conf/pip.ini)中设置官方源为默认索引,CodeArtifact为额外索引:
该配置下pip会优先从官方源查找依赖,仅当官方源不存在对应包时才会从CodeArtifact拉取,只会同步你的私有包,不会缓存公共依赖。[global] index-url = https://pypi.org/simple/ extra-index-url = https://<CodeArtifact认证信息>@<域>-<账户ID>.d.codeartifact.<区域>.amazonaws.com/pypi/<仓库名>/simple/ trusted-host = <域>-<账户ID>.d.codeartifact.<区域>.amazonaws.com
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

