使用Serverless Framework上传包至AWS Code Artifact报错求助
问题解答
核心结论
可以将Serverless相关的合法软件包上传至AWS Code Artifact,但你的操作存在本质错误——用PyPI工具twine上传了非PyPI格式的文件。
错误原因
sls package生成的target/dev目录里包含CloudFormation模板(如cloudformation-template-create-stack.json)、Lambda代码包等部署 artifacts,这些都不是PyPI认可的分发格式(PyPI只接受.whl、.tar.gz等标准Python包文件)。而twine是专门用于上传PyPI包的工具,自然会识别不了JSON这类文件。
正确操作方案
情况1:上传Serverless项目中的Python依赖包
如果你的目标是把项目用到的Python依赖包存到Code Artifact的PyPI仓库:
- 先将你的Python代码打包成标准PyPI格式:
# 确保安装build工具 pip install build # 生成标准PyPI包文件(输出到dist目录) python -m build - 再用twine上传dist目录下的合法文件:
aws codeartifact login --tool twine --repository XX --domain XX --domain-owner XX --region XX twine upload --repository codeartifact dist/*
情况2:上传整个Serverless部署包
如果想存储sls package生成的完整部署 artifacts,AWS Code Artifact并非合适选择——它的定位是软件包仓库,而非部署 artifacts 存储。推荐用AWS S3来存储这类文件:
- 将
target/dev目录打包成zip:zip -r serverless-dev-package.zip target/dev/ - 上传到S3:
aws s3 cp serverless-dev-package.zip s3://your-bucket-path/ - 后续部署时直接从S3拉取该zip包即可。
如果硬要通过Code Artifact存储,需要将部署包封装成符合PyPI格式的包(比如把zip作为包资源),但这属于非常规用法,不推荐。
内容的提问来源于stack exchange,提问作者MathAng
相关产品推荐
相关产品推荐

