在非根上下文

时间:2018-01-08 22:43:34

标签: 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用户上下文

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用户环境中运行。

3 个答案:

答案 0 :(得分:0)

您可能以非root用户身份运行AWS CodeDeploy代理。只有root才能在AfterInstall挂钩中拥有ec2-user用户,因为没有其他用户帐户可以在没有密码身份验证的情况下运行替代用户“su”命令。

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

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

  

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

如果您已经以runas运行CodeDeploy代理,则无需在AfterInstall挂钩中提供 let now = Date() let cal = Calendar.current var start = cal.startOfDay(for: Date()) let inYesterday = cal.date(byAdding: .day, value: -5, to: now)! start = cal.startOfDay(for: inYesterday) var end = cal.startOfDay(for: Date()) let inTomorrow = cal.date(byAdding: .day, value: 1, to: now)! end = cal.startOfDay(for: inTomorrow) 元素。

答案 1 :(得分:0)

如果您使用SDK触发CodeDeploy,请使用以下参数:services: - xvfb

请参阅:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CodeDeploy.html#createDeployment-property

答案 2 :(得分:0)

如果您已将 codedeploy 配置为非 root,则从 appspec.yml删除 runas 命令。保存并重试!