在非根上下文中运行 Linux AWS CodeDeploy 代理时出现问题

Rya*_*son 5 linux amazon-ec2 aws-code-deploy

我正在使用 AWS CodeDeploy 将代码部署到我们的 AWS Amazon Linux 实例。我遵循了这篇知识库文章https://aws.amazon.com/premiumsupport/knowledge-center/codedeploy-agent-non-root-profile/让代理在 ec2-user 上下文而不是 root 中执行

在进行更改之前,yml 文件中的脚本按预期执行(但我们需要脚本在非 root 上下文中执行)并且设置 runas: appspec.yml 文件的部分似乎没有执行 ec2- 中的脚本用户上下文符合预期

应用程序规范.yml:

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ec2-user/veddor/api
    owner: ec2-user
hooks:
    AfterInstall:
      - location: deploy/script/deploy-veddor-api.sh
        timeout: 300
        runas: ec2-user
Run Code Online (Sandbox Code Playgroud)

进行更改后,现在显示此错误,而不是执行 appspec 文件中指定的脚本

LifecycleEvent - AfterInstall
Script - deploy/script/deploy-veddor-api.sh
[stderr]Password: su: Authentication failure
Run Code Online (Sandbox Code Playgroud)

部署-veddor-api.sh 的内容

cp /home/ec2-user/veddor/api/deploy/config/Config-roddev.php /home/ec2-user/veddor/api/app/config/Config.php
cd /home/ec2-user/veddor/api
chmod +x ./composer.phar
php ./composer.phar install
Run Code Online (Sandbox Code Playgroud)

我正在寻求帮助来弄清楚我需要做什么才能让脚本 deploy-veddor-api.sh 在 ec2-user 上下文中实际运行。

小智 6

您可能以非 root 用户身份运行 AWS CodeDeploy Agent。只有 root 才能将runas用户加入您的AfterInstall钩子中,因为没有其他用户帐户可以在没有密码身份验证的情况下运行替代用户“su”命令。

查看 AWS 的 appspec 用户指南中“runas”的详细信息:

https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-struct-hooks.html

runas 可选。运行脚本时要模拟的用户。默认情况下,这是在实例上运行的 AWS CodeDeploy 代理。AWS CodeDeploy 不存储密码,因此如果 runas 用户需要密码,则无法模拟该用户。此元素仅适用于 Amazon Linux 和 Ubuntu Server 实例。

如果您已经将 CodeDeploy Agent 作为 运行ec2-user,则无需在挂钩runas中提供该元素AfterInstall