如何更新CodePipeline的AWS CLI版本或适配Lambda更新命令兼容1.18
解决AWS CodePipeline中旧CLI版本无法通过镜像更新Lambda的问题
问题原因
你使用的AWS CLI版本(1.18.49)过于老旧,aws lambda update-function-code命令在该版本中尚未支持--image-uri参数——该参数是AWS为Lambda容器镜像部署功能新增的,需要较新的CLI版本才能识别。
解决方案一:在构建阶段升级AWS CLI
直接在CodePipeline的构建步骤中升级AWS CLI到支持容器镜像参数的版本(推荐使用AWS CLI v2,兼容性更好),修改后的构建YAML如下:
build: commands: - echo Entered the post_build phase... - echo Build completed on `date` - docker build -t $imageName . - docker tag $imageName $ecr:latest - aws ecr get-login-password --region $region | docker login --username AWS --password-stdin $account.dkr.ecr.$region.amazonaws.com - docker push $ecr - echo going to update lambda # 升级AWS CLI到v2版本 - curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" - unzip -q awscliv2.zip - sudo ./aws/install --update - aws --version # 验证升级后的版本 - echo $lambdaFunctionName - echo $ecr - aws lambda update-function-code --function-name $function_name --image-uri $ecr:latest
说明
- 上述命令会下载并安装AWS CLI v2,覆盖旧版本。
--update参数确保直接升级现有CLI,无需卸载旧版本。- 升级后执行
aws --version应该会显示类似aws-cli/2.x.x的版本,此时--image-uri参数即可正常使用。
解决方案二:改用S3部署(备选)
如果暂时无法升级CLI,可将代码打包为zip文件上传到S3,再使用旧版本CLI支持的参数更新Lambda:
aws lambda update-function-code --function-name $function_name --s3-bucket your-bucket-name --s3-key path/to/your/code.zip
但此方法不适用于容器镜像部署场景,仅作为传统代码包部署的备选方案。
内容的提问来源于stack exchange,提问作者219CID
相关产品推荐
相关产品推荐

