如何替换在我部署 Elastic Beanstalk 应用程序时不再工作的 AWS CLI 命令

Posted

技术标签:

【中文标题】如何替换在我部署 Elastic Beanstalk 应用程序时不再工作的 AWS CLI 命令【英文标题】:How do I replace this AWS CLI command that is no longer working when I deploy Elastic Beanstalk application 【发布时间】:2021-09-25 20:03:52 【问题描述】:

我今天必须重新部署我的弹性 beanstalk 应用程序,但由于取消对 Python 2 的支持存在一些问题,它不再工作

实例:i-0872ed7568a9820f5] 实例上的命令失败。返回 代码:1 输出:(截断)...检测到:Python 2.7 继续使用 此安装程序必须使用 Python 3.6 或更高版本。了解更多信息 请参阅以下博客文章: https://aws.amazon.com/blogs/developer/announcing-end-of-support-for-python-2-7-in-aws-sdk-for-python-and-aws-cli-v1/。 .ebextensions/copyindexes.config 中的命令 01_install_cli 失败。为了 更多详细信息,请使用控制台或 EB CLI 检查 /var/log/eb-activity.log。

我不直接使用 Python 2,但已将问题追踪到 copyindexes.config 文件我的 .ebextensions 文件夹中包含以下行

    01_install_cli:
            command: wget https://s3.amazonaws.com/aws-cli/awscli-bundle.zip; unzip awscli-bundle.zip;  ./awscli-bundle/install -b ~/bin/aws
    
    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;

我应该如何改变这个来解决这个问题

更新

好的,所以我将脚本修改为

   01_install_cli:
    command: wget https://s3.amazonaws.com/aws-cli/awscli-bundle-1.18.200.zip; unzip awscli-bundle-1.18.200.zip;  ./awscli-bundle/install -b ~/bin/aws

那一点似乎有效,但后来在 eb_activity.log 我现在得到了

  Traceback (most recent call last):
    File "/usr/lib64/python2.7/logging/__init__.py", line 884, in emit
      stream.write(fs % msg.encode("UTF-8"))
  UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 49: ordinal not in range(128)
  Logged from file util.py, line 476
  Traceback (most recent call last):
    File "/usr/lib64/python2.7/logging/__init__.py", line 884, in emit
      stream.write(fs % msg.encode("UTF-8"))
  UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 72: ordinal not in range(128)
  Logged from file util.py, line 476

看来我选了一个不好的版本,我应该选什么?

我尝试了 1.19.0 和相同的错误,所以问题可能是 aws-cli 版本,但它是什么

我只修改了下载和安装 cli 行,当我有错误的安装行时,它给出了错误,所以我必须有这个权利,但我不知道这个新错误来自哪里。

【问题讨论】:

这些行看起来都还可以。问题是您运行它们的虚拟机安装了 Python 2,而它应该安装了 Python 3。这是从哪里来的? 将您的 EB 环境的平台版本更新为 Python 3.6,一切顺利。 虚拟机是amazon提供的Tomcat 7和Java 7机器作为平台。我确实尝试使用不同的平台启动,但失败并出现不同的错误,所以我想我想做的是修改这个脚本,以便它使用不需要 Python 3.6 的 aws-cli 版本 【参考方案1】:

您可能已经知道 Python 2 已被弃用。要将 AWS CLI 版本 1 与较旧版本的 Python 一起使用,您需要安装较早版本的 AWS CLI 版本 1。

Python 软件基金会已于 2020 年 1 月 1 日弃用 Python 2.7。今后,使用 AWS CLI 版本 1 的客户应过渡到使用 Python 3,至少使用 Python 3.6。 从 2021 年 7 月 15 日开始,AWS CLI 版本 1 的新版本不再支持 Python 2.7。

查看官方AWS documentation here

最好, 斯蒂芬

【讨论】:

是的,这是长期计划,但是切换到支持 Python 3 的平台会产生连锁反应,会导致其他问题(例如,将使用更高版本的 Java 和 Tomcat)不完全兼容代码。这是生产系统,所以我只想通过最少的更改来启动并运行它。 要将 AWS CLI 版本 1 与旧版本的 Python 一起使用,您需要安装 AWS CLI 版本 1 的旧版本。 @Taylor 例如尝试版本 1.19.0 那个是正确的版本,有没有;列表因为我有 1.18.200 并且没有工作 不管我使用什么版本似乎都会给出这个 unicode 错误,我不知道为什么。

以上是关于如何替换在我部署 Elastic Beanstalk 应用程序时不再工作的 AWS CLI 命令的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Elastic Beanstalk 中运行“rake db:drop”

为啥 xamarin 突然不让我部署到 iOS 设备

Node JS - Elastic Beanstalk AWS - 允许写访问

为啥我部署的 Laravel 8 应用程序无法通过符号链接在存储目录中找到图像?

Elastic Beanstalk 的 Python 打印语句输出

Elastic Beanstalk 预部署 Laravel 节点错误