[英]how to configure Elastic Beanstalk to deploy code to an instance but not add it to the load balancer
我正在將Rails應用程序移動到AWS並正在使用EB。 我需要在單獨的實例上運行守護程序(我不希望該實例為HTTP請求提供服務)。
該守護程序是應用程序代碼庫的一部分,並將與與Web服務器實例相同的RDS實例進行通信。 我想知道,如果可能的話,我如何配置EB以將rails應用程序部署到另一個實例,但是要避免將該實例添加到負載均衡器中,並在新修訂版完成后在該實例上(重新)啟動守護程序部署。
我意識到我可以通過自己在EB之外管理這個附加實例來達到相同的結果,但是我覺得有更好的方法。 我自己做了一些研究,卻沒有找到我想要的。
我也可以只在其中一個Web服務器實例上運行該守護程序,並以它還可以處理HTTP請求這一事實來生活。 既然現在就可以接受,那就是我今天正在做的事情……但是我想要一個專用於該守護程序的實例,如果我不必為此而放棄EB部署的便利,那就太好了。
這是我第一次使用Elastic Beanstalk。 我對AWS有一些經驗。 我希望我的問題有道理。 如果沒有,將接受一個指出為什么沒有意義的答案。
謝謝!
在大多數情況下,盡管不是很直接,但您可以在.ebextensions
提供一個.config
文件來運行您的腳本文件。
這個加快部署速度的示例顯示了運行一些腳本並來回移動數據。 更好的是,作者描述了序列和部署過程。
我只是在從事這種類型的容器定制。 我已經讀過其他一些文件,它們將文件放在/opt/elasticbeanstalk/hooks/appdeploy/pre
和/opt/elasticbeanstalk/hooks/appdeploy/post
目錄中,其中許多可以通過閱讀上面鏈接的帖子來獲取。
還要注意,您可以在yaml .config
文件中包含腳本的content
,例如我昨天發現的文件:
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_delayed_job.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
. /opt/elasticbeanstalk/support/envvars
cd $EB_CONFIG_APP_CURRENT
su -c "RAILS_ENV=production script/delayed_job --pid-dir=$EB_CONFIG_APP_SUPPORT/pids restart" $EB_CONFIG_APP_USER
使用Elastic Beanstalk,通常可以通過在同一EB應用程序(相同的代碼庫,相同的.eb*
文件,不同的環境)中使用工作層環境來實現。
這是一個將Rails應用程序部署到一個Web服務器和兩個專門工作人員的示例:
[yacin@mac my_rails_app (master)]$ eb list -v
Region: us-west-1
Application: my_rails_app
Environments: 3
email-workers-production : ['i-xxxxxxx']
* web-servers-production : ['i-xxxxxx']
job1-workers-production : ['i-xxxxxxx', 'i-xxxxxx']
工人沒有公共HTTP接口,無法從與前端共享的隊列中提取作業。 可以將工作服務器配置為可以訪問同一數據庫,並具有負載平衡和自動擴展功能。
這是一種非常靈活且可擴展的方法,但是需要一些工作來進行設置。 以下是有關此主題的兩個資源: Amazon Worker Tier Video Tutorial , Elastic Beanstalk 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.