【问题标题】:Why does aws code deploy throw "No passwd entry for user 'ec2-user'" error inspite of running everything as root?尽管以 root 身份运行所有内容,但为什么 aws code deploy 会抛出“No passwd entry for user 'ec2-user'”错误?
【发布时间】:2023-11-18 11:37:01
【问题描述】:

以下是错误消息:

以下是相关文件:

stop.sh

#!/bin/bash
pkill -f node

appspec.yml

version: 0.0
os: linux
files:
  - source: /
    destination: /var/www/
permissions:
  - object: /var/www/
    owner: root
    mode: 777
hooks:
  BeforeInstall:
    - location: scripts/install.sh
      timeout: 300
      runas: root
  AfterInstall:
    - location: scripts/post_install.sh
      timeout: 300
      runas: root
  ApplicationStart:
    - location: scripts/run.sh
      timeout: 300
      runas: root
  ApplicationStop:
    - location: scripts/stop.sh
      timeout: 300
      runas: root
  ValidateService:
    - location: scripts/validate.sh
      timeout: 300
      runas: root

以下是操作系统详细信息:

ubuntu@ip-172-31-2-33:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:    14.04
Codename:   trusty

我也尝试以 ec2-user 'ubuntu' 身份运行所有钩子,结果是一样的。

【问题讨论】:

    标签: node.js amazon-web-services amazon-ec2 sudo aws-code-deploy


    【解决方案1】:

    ec2-user 只是默认实例用户。在所有 linux 中,如果没有第一个问题sudo

    ,您将无法执行任何系统命令

    修复:

    #!/bin/bash
    sudo pkill -f node
    

    【讨论】:

    • 不起作用。请在回答之前尝试自己。 stop.sh 脚本已经以 root 身份触发,所以我猜它不需要你在每个命令之前写 sudo。
    【解决方案2】:

    如果您之前在实例中成功部署了 sam 应用程序,应用程序停止脚本实际上是从上次成功修订开始运行的,您能否检查上次成功修订中的应用程序停止脚本,它包含您期望的所有内容?

    如果 ApplicationStop 不在最后一次成功的修订中,您可能需要设置 --ignore-application-stop-failures 选项。你

    【讨论】: