Amazon-Web-Services

在 AWS Beanstalk 安裝後掛鉤中將 PHP 腳本作為後台程序執行

  • March 29, 2020

UDPATE

事實證明,這是使用彈性豆莖的錯誤方法。該應用程序將執行,但它將是一個 hack 而不是正確的解決方案。

請改用 EC2。


我正在使用以下設置部署 PHP 應用程序:

設置

  1. Bitbucket 管道使用 composer 建構應用程序並創建一個完成的 zip 文件。
  2. Bitbucket AWS Elastic Beanstalk 將程式碼部署到 AWS Elastic Beanstalk 應用程序。
  3. opt/elasticbeanstalk/hooks/appdeploy/post中的安裝後掛鉤在部署後執行 PHP 腳本

問題

應該在部署後掛鉤上作為後台任務執行的 PHP 腳本永遠不會停止執行。這有效地堵塞了管道。

管道永遠執行的螢幕截圖(故意停止)

Bitbucket 管道檢查AWS Elastic Beanstalk 應用程序的執行狀況

這是 .ebextensions 配置文件的程式碼。

container_commands:
 01-create_post_hook:
   command: "mkdir -p /opt/elasticbeanstalk/hooks/appdeploy/post"
   ignoreErrors: true
files:
 "/opt/elasticbeanstalk/hooks/appdeploy/post/start.sh":
   mode: "000770"
   owner: root
   group: root
   content: | #!/bin/bash
     echo "--------Starting Runner------------"
     php /var/app/current/runner.php &

問題

  • bash 腳本是否正確配置為在後台執行
  • 應用程序更新後是否有另一種(推薦的)方法來執行腳本?

筆記

由於應該在後台執行的腳本實際上從未完成,因此應用程序的健康狀態始終保持在“資訊”。這是一個問題,因為要成功部署應用程序,它需要處於“OK”狀態。

應用程序執行狀況停留在“資訊”而不是“確定”

我在整個網際網路上發現的類似問題:

https://forums.aws.amazon.com/thread.jspa?threadID=301439&tstart=0 https://forums.aws.amazon.com/thread.jspa?messageID=425130粪

通常,我們使用 CI/CD(持續集成/持續傳遞)工具,例如 Jenkins、CircleCI 或 Bamboo 來完成這些工作。他們可以從 Bitbucket 獲得一個 webhook,它可以觸發任何類型的任務,例如呼叫 PHP 腳本、執行 bash 腳本、執行 raketask 等。

引用自:https://serverfault.com/questions/965761