1

我正在通過Elastic Beanstalk部署我的應用程序,Elastic Beanstalk創建Elastic Load Balancer並將所有實例放在它後面(3個或更多)。如何連接到Elastic Load Balancer後面的特定實例

有沒有辦法直接聯繫每個實例?我想觸發每個實例的特定命令(git pull命令與我的遠程回購中的最新代碼同步)。

我有從PHP SDK實例的IP地址和公共DNS的列表,但由於防火牆規則將IP地址的來源限制在80端口上的彈性負載均衡器IP,我似乎無法直接訪問它們。

有沒有辦法解決它?

P.S. SSH端口似乎爲所有流量打開,但我怎樣才能創建一個觸發器?我希望創建一個PHP腳本來使遠程回購上的webhook實現自動化。

回答

2

您需要設置配置項(或創建一個簡單的web服務)並在存儲庫中創建一個webhook。您的CI需要獲取Elastic Beanstalk環境下的所有實例,然後通過SSH調用git pull

或者,只需通過.ebxensions腳本在您的所有實例中創建一個cron作業。

我認爲在Elastic Beanstalk中運行git pull並不是一個好習慣,以便將您的應用程序與您的git回購同步。因爲它錯誤地使用了語義。有時,您無法從應用程序版本中確定您的實例中的哪個應用程序版本。最好在Elastic Beanstalk中創建新的應用程序版本以部署新的應用程序版本。

如果您在Github上託管您的回購,您可以查看CodeDeploy

+0

嗨,謝謝你的回答..我會嘗試挖掘更多的CI和SSH ..關於CodeDeploy我也想到了這一點,但後來我在亞馬遜博客上看到,「CodeDeploy針對的是管理客戶他們的EC2實例,而不是那些使用AWS Elastic Beanstalk等應用程序管理服務的實例。實際上,我使用的是AWS Elastic Beanstalk,並沒有說明在使用beanstalk時應該使用什麼(我可以肯定地上傳新的應用程序版本,但對於像這裏或那裏的一行代碼這樣的小修復來說,這太麻煩了,簡單的bug修復程序)[1] goo.gl/nEVcwU – supersan

+0

「我可以絕對上傳新的應用程序版本,但是對於小的修復程序來說這太麻煩了」 - 但是*是應用程序的新版本,所以您應該這樣做。如果你不想這樣做,那麼你可能不應該使用Beanstalk或CodeDeploy。而是手動部署,並使用Fabric或類似的東西通過SSH推送更新。 – jarmod

3

我強烈建議您在所有部署中都使用EB CLI以及git集成,無論多小。這很好,因爲你可以將git分支映射到eb use YOUR_ENV的環境,然後當你運行eb deploy並檢出該分支時,它將部署到該環境。

確保多個服務器提取正確的代碼並且一切按預期工作都涉及很多工作。如果服務器處於啓動過程中,但尚未準備好進行SSH,那麼您的腳本會跳過它,但它不會獲得新代碼?

另外,當新服務器啓動時會發生什麼,但它使用的是舊應用程序,因爲這就是EB中的內容?你可以讓你的kickstart做一個git pull,但是當你還沒有準備好推送時,會發生什麼,一個新的服務器啓動,並且與新代碼一起?

我大概可以找到5個更多的邊緣情況下沒有打破汗水。看看eb deploy,你會很高興你做到了。

+0

嗨,這可以使用AWS PHP SDK嗎?我在問,因爲這個東西在客戶端的機器上運行,需要從管理區的頁面執行 – supersan

+1

這從命令行運行,可能有一個SDK工具,但我對此表示懷疑。你可以用'exec()'這樣的東西來觸發這個。運行這個的服務器應該有一個獨立的代碼庫,所以你可以從git中取出然後部署。它看起來像'exec(「cd/path/to/code && git pull && eb deploy」)'。我質疑客戶端從基於Web的工具中部署的用例,並建議工程師處理它,但您可能有自己的理由。 – dotcomly

相關問題