在 .ebextension 中使用相同代码重新部署弹性 beantalk 时出现 python 错误

Getting python error when redeploying elastic beanstalk with same code in .ebextension

我不知道为什么在使用相同构建重新部署 ebs 时出现错误。创建新的 ebs env 时一切正常,但重新部署 ebs env 时出现 python 错误。

    **CONFIG FILE**
    
    ```files:
      "/root/default.json":
        mode: "000755"
        owner: root
        group: root
        content: |
          {
              "agent": {
                      "run_as_user": "root",
                      "metrics_collection_interval": 60
              },
              "metrics": {
                      "metrics_collected": {
                              "mem": {
                                      "measurement": [
                                              "mem_used_percent"
                                      ],
                                      "metrics_collection_interval": 60
                              },
                              "disk": {
                                      "measurement": [
                                              "used_percent"
                                      ],
                                      "metrics_collection_interval": 60,
                                      "resources": [
                                              "/"
                                      ]
                              }
                      },
                      "append_dimensions": {
                              "InstanceId": "${aws:InstanceId}"
                      }
               }
          }
    container_commands:
      00_wget_pkg:
        cwd: /root
        command: wget https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
      01_install:
        cwd: /root
        command: sudo rpm -U /root/amazon-cloudwatch-agent.rpm
      02_change_own:
        cwd: /opt/aws/amazon-cloudwatch-agent
        command: chown -R root:root var && chown -R root:root logs &&  chown -R root:root etc
      03_change_dr:
        cwd: /root
        command: mv default.json /etc/amazon/amazon-cloudwatch-agent/amazon-cloudwatch-agent.d/
      04_start_cw:
        cwd: /root
        command: systemctl stop amazon-cloudwatch-agent && systemctl start amazon-cloudwatch-agent && systemctl enable amazon-cloudwatch-agent
      05_start_cw:
        cwd: /root
        command: rm -rf /root/amazon-cloudwatch-agent.rpm*```
    
    **ERROR**
    
    2021-09-28 11:33:45,384 [INFO] Running configSets: Infra-EmbeddedPostBuild
    2021-09-28 11:33:45,387 [INFO] Running configSet Infra-EmbeddedPostBuild
    2021-09-28 11:33:45,389 [INFO] Running config postbuild_0_T8
    2021-09-28 11:33:45,977 [INFO] Command 00_wget_pkg succeeded
    2021-09-28 11:33:46,058 [ERROR] Command 01_install (sudo rpm -U /root/amazon-cloudwatch-agent.rpm) failed
    2021-09-28 11:33:46,058 [ERROR] Error encountered during build of postbuild_0_T8: Command 01_install failed
    Traceback (most recent call last):
      File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 573, in run_config
        CloudFormationCarpenter(config, self._auth_config).build(worklog)
      File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 273, in build
        self._config.commands)
      File "/usr/lib/python3.7/site-packages/cfnbootstrap/command_tool.py", line 127, in apply
        raise ToolError(u"Command %s failed" % name)
    cfnbootstrap.construction_errors.ToolError: Command 01_install failed
    2021-09-28 11:33:46,059 [ERROR] -----------------------BUILD FAILED!------------------------
    2021-09-28 11:33:46,059 [ERROR] Unhandled exception during build: Command 01_install failed
    Traceback (most recent call last):
      File "/opt/aws/bin/cfn-init", line 176, in <module>
        worklog.build(metadata, configSets)
      File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 135, in build
        Contractor(metadata).build(configSets, self)
      File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 561, in build
        self.run_config(config, worklog)
      File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 573, in run_config
        CloudFormationCarpenter(config, self._auth_config).build(worklog)
      File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 273, in build
        self._config.commands)
      File "/usr/lib/python3.7/site-packages/cfnbootstrap/command_tool.py", line 127, in apply
        raise ToolError(u"Command %s failed" % name)
    cfnbootstrap.construction_errors.ToolError: Command 01_install failed

我不知道为什么在使用相同构建重新部署 ebs 时出现错误。创建新的 ebs env 时一切正常,但重新部署 ebs env 时出现 python 错误。

在这种情况下,您应该使用 commands,因为在您的应用程序服务器启动之前,这些命令应该 运行。但仅此并不能解决问题。

容器命令和命令运行每次部署/重新部署一个版本的 EB 环境。

对于这些命令中的每一个,您都可以有一个 测试指令,它将决定命令是否应该是 运行。语法 -

commands:
  command: command to run
  test: conditions for command

只有当测试命令 returns 为真或 0

时,该命令才会 运行

在您的情况下,命令是为您的环境安装和设置 amazon-cloudwatch-agent。由于 amazon-cloudwatch-agent 已经安装,他们在重新部署期间抛出错误。为避免这种情况,请使用测试命令来检查软件包是否已安装。

通过 AWS Docs,还有另一种使用 yum 包管理器安装包的更简单的方法。

尝试 运行仅使用以下命令,

commands:
  00_install_cw_agent:
    command: yum install amazon-cloudwatch-agent
    test: ! yum list installed amazon-cloudwatch-agent
  01_start_cw:
    command: systemctl stop amazon-cloudwatch-agent && systemctl start amazon-cloudwatch-agent && systemctl enable amazon-cloudwatch-agent

第一个命令将安装 amazon-cloudwatch-agent 包。但它只会 运行 如果测试命令 returns 0.

测试命令 returns 0 如果包已经安装,与我们想要的相反,所以我们使用 ! 运算符否定它。所以命令 运行s 仅当软件包尚未安装时。

我们没有对第二个命令使用任何测试指令,因为每次部署新版本时它都需要运行。

让我知道这是否适合你。

编辑 - 由于某种原因,在 configure stage 之前创建/复制到 amazon-cloudwatch-agent.d 目录中的任何文件都被 EB

删除

所以尝试使用 container_commands 移动文件并重新启动 cloudwatch 代理。

如果这不起作用,您可以为此作业创建一个 predeploy 平台挂钩。