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

在非根上下文中运行linux AWS CodeDeploy代理时出现问题,linux,amazon-ec2,aws-code-deploy,Linux,Amazon Ec2,Aws Code Deploy,我正在使用AWS CodeDeploy将代码部署到我们的AWS Amazon Linux实例。我遵循这篇知识库文章,让代理在ec2用户上下文中执行,而不是在根用户上下文中执行 在进行更改之前,yml文件中的脚本按预期执行(但我们需要在非根上下文中执行该脚本),并且设置appspec.yml文件的runas:部分似乎没有按预期在ec2用户上下文中执行该脚本 appspec.yml: version: 0.0 os: linux files: - source: / destinatio

我正在使用AWS CodeDeploy将代码部署到我们的AWS Amazon Linux实例。我遵循这篇知识库文章,让代理在ec2用户上下文中执行,而不是在根用户上下文中执行

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

appspec.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
由于进行了更改,现在将显示此错误,而不是执行appspec文件中指定的脚本

LifecycleEvent - AfterInstall
Script - deploy/script/deploy-veddor-api.sh
[stderr]Password: su: Authentication failure
deploy-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

我正在寻求帮助,以了解我需要做什么才能让脚本deploy-veddor-api.sh在ec2用户上下文中实际运行。

您可能正在以非root用户的身份运行AWS CodeDeploy代理。只有root用户才能在
AfterInstall
hook中拥有
runas
用户,因为没有密码验证,任何其他用户帐户都不能运行替代用户“su”命令

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

runas可选。运行脚本时要模拟的用户。通过 默认情况下,这是在实例上运行的AWS CodeDeploy代理。自动气象站 CodeDeploy不存储密码,因此无法访问用户 如果运行方式用户需要密码,则模拟。这一要素适用 仅适用于Amazon Linux和Ubuntu服务器实例


如果您已经以
ec2用户的身份运行CodeDeploy代理
,那么您不需要在
AfterInstall
钩子中提供
runas
元素。

如果您使用SDK触发CodeDeploy,这里有一个参数:
ignoreApplicationStopFailures:true


请看:

就是这样!我没有想到在更换代理后删除runas。一旦我在appspec中删除了runas语句,它就按预期工作了。非常感谢你,