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的范围内,而且我自己管理这个实例就是做到这一点的方法。 –

相关问题