2

我正在將Rails應用程序移動到AWS並使用EB。我需要在一個單獨的實例上運行守護程序(我不希望此實例正在提供HTTP請求)。如何配置Elastic Beanstalk將代碼部署到實例但不將其添加到負載平衡器

守護程序是應用程序代碼庫的一部分,並將與Web服務器實例通信相同的RDS實例。如果可能,我想知道如何配置EB將Rails應用程序部署到其他實例,但是請不要將該實例添加到負載平衡器,並且在重新啓動後重新啓動該實例的守護程序部署。

我意識到我可以通過在EB之外自己管理這個額外的實例來實現相同的結果,但是我有一種感覺,有一種更好的方法。我自己做了一些研究,但沒有找到我想要的。

我也可以在其中一個Web服務器實例上運行守護進程,並承認它也提供HTTP請求。由於這是現在可以接受的,這就是我今天所做的事情......但是我希望爲該守護進程提供一個專用實例,如果我不必爲此而放棄部署EB的便利,那將是非常棒的。

這是我第一次使用Elastic Beanstalk;我有一些AWS的經驗。我希望我的問題有道理。如果沒有,那麼指出爲什麼它沒有意義的答案將被接受。

謝謝!

+1

僅供參考 - 我剛剛發佈了一個讓使用eb更容易的gem https://github.com/alienfast/elastic-beanstalk – kross

回答

0

隨着彈性魔豆,這通常是通過使用工人層實現(相同的代碼庫,相同的.eb*文件,只是不同的環境)

下面是一個部署到一個Web服務器的rails應用程序的示例,以及兩個專門工人

[[email protected] 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 TutorialElastic Beanstalk

+0

嘿,他們加了!好。 –

1

絕大多數情況下,您可以在.ebextensions中提供.config文件來運行腳本文件。

This example of speeding up a deploy顯示運行一些腳本和來回移動數據。更好的是,作者描述了順序和部署過程。

我只是着手這種類型的容器定製。我讀過其他人刪除/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 
+0

感謝您的信息,kross!但它並不回答我的問題。無論我添加到配置中的任何自定義腳本如何,該實例仍會被添加到負載平衡器中;這就是我(試圖阻止的)。我現在非常有信心,這不在EB的範圍內,而且我自己管理這個實例就是做到這一點的方法。 –

相關問題