11

現在、Github および AWS Codedeploy を介して、nodejs アプリケーションの EC2 インスタンスへのデプロイを自動化しようとしています。ここからの指示 にできる限り厳密に従いましたが、AfterInstall フック イベントで問題が発生しました。

これが私のymlファイルです:

version: 0.0
os: linux
files:
  - source: /backend
    destination: /home/ec2-user/signal
permissions:
  - object: /
    pattern: "**"
    owner: ec2-user
    group: ec2-user
hooks:
  ApplicationStop:
    - location: backend/app/deploy/stop.sh
      timeout: 10
      runas: ec2-user
  BeforeInstall:
    - location: backend/app/deploy/beforeinstall.sh
      timeout: 1200
      runas: ec2-user
  AfterInstall:
    - location: backend/app/deploy/afterinstall.sh
      timeout: 1200
      runas: ec2-user
  ApplicationStart:
    - location: backend/app/deploy/start.sh
      timeout: 60
      runas: ec2-user
ValidateService:
    - location: backend/app/deploy/validate.sh
      timeout: 60
      runas: ec2-user

次のように AWS CLI 経由でデプロイを呼び出します。

aws deploy create-deployment --application-name Signal --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name Production --description "Deployment" --github-location repository=githubusername/repository,commitId=ABCD123 --ignore-application-stop-failures

AfterInstall フェーズに到達して「afterinstall.sh」が実行されるまで、すべてが正常に機能します。そのファイルは次のようになります。

#!/bin/bash
cd /home/ec2-user/signal/app/
npm install

また、次のエラー ログが生成され、デプロイが失敗します。

エラー コード: ScriptFailed

メッセージ:指定された場所にあるスクリプト: backend/app/deploy/afterinstall.sh をユーザー ec2-user として実行すると、終了コード 127 で失敗しました

LifecycleEvent - AfterInstall
Script - backend/app/deploy/afterinstall.sh
[stderr]/opt/codedeploy-agent/deployment-root/be9902d2-8af0-46fd-b186-23ead6bea5a4/d-SBW6YCLKC/deployment-archive/backend/app/deploy/afterinstall.sh: line 7: npm: command not found

ただし、ec2 インスタンスに SSH で接続する場合は、次のいずれかの一時ディレクトリに移動します。

/opt/codedeploy-agent/deployment-root/be9902d2-8af0-46fd-b186-23ead6bea5a4/d-SBW6YCLKC/deployment-archive/backend/app/deploy/

また

cd /home/ec2-user/signal/app/

手動で実行するかnpm install、スクリプトを介して実行すると、正常./afterinstall.shに実行されnpmます。

Codedeploy エージェントで異なるのはなぜですか? 私は を使用してrunas: ec2-userいるので、権限などは としてボックスに ssh したときと同じであると想定しますec2-user

私が間違っているばかげたことは何ですか?大変感謝します。

4

3 に答える 3