web-dev-qa-db-ja.com

アマゾンウェブサービスCodeDeployappspec.ymlの問題

Node.jsアプリケーションこれは自動的にAmazon WebServiceにデプロイされますから CodeshipCodeDeploy AWSデプロイメントシステム

デプロイプロセス中に、現在実行中のWebアプリケーションを停止するようにappspec.ymlで設定しました。デプロイが完了したら、Webアプリケーションを再起動したいと思います。

os: linux
files:
  - source: /
    destination: /var/www/app2
hooks:
  AfterInstall:
      - location: bash_scripts/stop_forever.sh
        runas: ec2-user
  ApplicationStart:
      - location: bash_scripts/start_forever.sh
        runas: ec2-user

ただし、デプロイ中にappspec.ymlファイルからこれらのスクリプトのいずれかを正常に呼び出すことはまだできていません。

AWSデプロイメントエージェントログに表示されている現在のエラーは

Error CodeScriptMissing
Script Name /var/scripts/stop_forever.sh
MessageScript does not exist at specified location: /var/scripts/stop_forever.sh
Log TailLifecycleEvent - ApplicationStop

これは、これらのスクリプトを別の場所で実行しようとしていた古いバージョンのappspec.ymlファイルを参照しているようです。デプロイされたパッケージのappspec.ymlファイルの内容を変更しましたが、このエラーメッセージは各デプロイで同じままです。

上記のappspec.ymlファイルに加えて、次の変更も試みました。

  • 各フックのrunasパラメータをリストしていません
  • デプロイされたディレクトリ内のスクリプトを参照する
  • デプロイされたディレクトリ外のスクリプトを参照する
  • versionパラメータを最初に.に設定する

残念ながら、appspec.ymlのトラブルシューティングに関しては、 AWSドキュメント 以外にオンラインはほとんどありません。

私が間違っていることは何ですか?

14
Peter Bridger

ApplicationStopフックは、現在のデプロイメントappspec.ymlファイルを実行する前に、以前にインストールされたデプロイメントから呼び出されています。

これを防ぐには、以前にインストールしたデプロイメントをサーバーから削除する必要があります。

  • コードデプロイエージェントを停止します-Sudo service codedeploy-agent stop
  • /opt/codedeploy-agent/deployment-rootの下のすべての展開をクリアします
  • コードデプロイエージェントを再起動します-Sudo service codedeploy-agent start
28
user3802205

AWS開発者フォーラムに文書化されている別の方法があります。これが望ましいと思います。

デプロイメントの実行中にCLIツールで--ignore-application-stop-failuresオプションを使用すると、完全に機能しました。

フォーラムからの例:

aws deploy create-deployment --application-name APPLICATION --deployment-group-name GROUP --ignore-application-stop-failures --s3-location bundleType=tar,bucket=BUCKET,key=KEY --description "Ignore ApplicationStop failures due to broken script"

https://forums.aws.Amazon.com/thread.jspa?threadID=166904

17