部署Elastic Beanstalk时旧AWS CLI命令失效,如何解决Python2适配报错?
问题解决方案
根因说明
- 原始部署失败是因为当前默认下载的AWS CLI v1最新版本已终止对Python 2.7的支持,而你的Elastic Beanstalk实例底层环境默认用Python 2.7运行安装脚本
- 后续出现的
UnicodeDecodeError是Python 2.7默认使用ASCII编码处理输出流,当AWS CLI输出日志包含非ASCII字符时触发编码异常,与安装命令本身无关
最优解决方法:安装无Python依赖的AWS CLI v2
AWS CLI v2不依赖系统自带的Python版本,完全规避Python版本兼容问题,直接修改.ebextensions/copyindexes.config的01_install_cli命令即可:
01_install_cli: command: | wget https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip unzip awscli-exe-linux-x86_64.zip ./aws/install -b ~/bin/aws rm -rf aws awscli-exe-linux-x86_64.zip 02_get_index: command: | aws s3 cp --region eu-west-1 s3://jthink/release_index_21.tar.gz /home/ec2-user/release_index.tar.gz aws s3 cp --region eu-west-1 s3://jthink/artist_index_21.tar.gz /home/ec2-user/artist_index.tar.gz cd /usr/share/tomcat7 tar -xvf /home/ec2-user/release_index.tar.gz tar -xvf /home/ec2-user/artist_index.tar.gz rm /home/ec2-user/release_index.tar.gz rm /home/ec2-user/artist_index.tar.gz
备选方案:继续使用AWS CLI v1兼容版本
如果你必须保留使用AWS CLI v1,需要同时指定最后一个兼容Python2.7的版本,并添加编码环境变量规避解码错误:
01_install_cli: command: | wget https://s3.amazonaws.com/aws-cli/awscli-bundle-1.19.112.zip unzip awscli-bundle-1.19.112.zip ./awscli-bundle/install -b ~/bin/aws rm -rf awscli-bundle awscli-bundle-1.19.112.zip env: PYTHONIOENCODING: UTF-8 LC_ALL: en_US.UTF-8 02_get_index: command: | aws s3 cp --region eu-west-1 s3://jthink/release_index_21.tar.gz /home/ec2-user/release_index.tar.gz aws s3 cp --region eu-west-1 s3://jthink/artist_index_21.tar.gz /home/ec2-user/artist_index.tar.gz cd /usr/share/tomcat7 tar -xvf /home/ec2-user/release_index.tar.gz tar -xvf /home/ec2-user/artist_index.tar.gz rm /home/ec2-user/release_index.tar.gz rm /home/ec2-user/artist_index.tar.gz env: PYTHONIOENCODING: UTF-8 LC_ALL: en_US.UTF-8
注:AWS CLI v1 1.19.112是官方确认的最后一个完全兼容Python 2.7的版本,搭配编码环境变量即可解决解码报错问题。
内容的提问来源于stack exchange,提问作者Paul Taylor
相关产品推荐
相关产品推荐

