我有一个 .net MVC web 应用程序(MVC4,新的 web-api 和普通 MVC 之间的混合)。它托管在最新的 IIS Elastic Beanstalk 集群上。
我将应用程序上传到 Elastic Beanstalk 的方式是通过 VS2012 AWS 插件。我没有使用“git”方法上传,因为由于 windows git 中的最大路径名限制,这似乎不适用于 Windows。
在您创建新集群并将其保存在单个节点后,该应用程序运行良好。将新的应用程序版本上传到它也可以。
在 Elastic Beanstalk 添加或重新创建集群中的任何实例之后,就会出现这些问题。如果您通过增加最小节点数手动调整集群大小,或更改 VM 类型(例如,从微型变为小型),Elastic Beanstalk 将创建新节点并将它们添加到集群中。这些新节点 100% 损坏。它们正在运行 IIS,但是当您浏览它们时,您只会看到 IIS 默认屏幕,而不是我的 Web 应用程序。就像这些新节点根本没有加载我的 Web 应用程序一样。
此错误是 100% 可重现的,并且每次 Elastic Beanstalk 在初始集群创建后创建任何节点时都会发生。
事实上,Elastic Beanstalk 对我来说完全崩溃了。我需要尽快将此应用程序扩展到至少 4 个节点,但我不知道如何处理这种错误行为。
我现在只是复制了这个,以获得这个报告的一个很好的测试用例。通过 Visual Studio,我将我的应用程序发布到了 Small 类型的新负载平衡环境。然后通过 EB 网络管理页面,我将最小集群数更改为 2。
原始实例:i-4664813e (ec2-54-227-153-42.compute-1.amazonaws.com)
新增实例:i-325f2056 (ec2-54-205-64-135.compute-1.amazonaws.com)
(您必须将这些 URL 复制并粘贴到您的浏览器中,因为我显然不能发布超过 2 个链接)
您可以看到新添加的实例不起作用。它正在加载默认的 IIS 应用程序,而不是我的应用程序(您应该看到“SV、SlotsVacation、slotsvacation、dev”)。
我比较了两个实例的 2 个日志文件,问题似乎出在此处:
工作日志文件:
cfn-hup.log:
2013-10-12 12:36:13,992 [INFO] Refreshing listener credentials
2013-10-12 12:36:14,210 [INFO] Scheduling next credential refresh in 7200 seconds
2013-10-12 12:37:38,934 [INFO] Received command ElasticBeanstalkCommand-AWSEBAutoScalingGroup (invocation id: 9c9388b0-3bac-412e-9936-3d89aa8f4297)
2013-10-12 12:37:38,934 [INFO] Running action for aws-eb-command-handler
2013-10-12 12:41:11,049 [INFO] Action for aws-eb-command-handler succeeded, returning SUCCESS
2013-10-12 12:41:15,651 [INFO] Received command ElasticBeanstalkCommand-AWSEBAutoScalingGroup (invocation id: e46a7650-94df-4481-afba-7c6fb47c98ef)
2013-10-12 12:41:15,651 [INFO] Running action for aws-eb-command-handler
2013-10-12 12:41:43,311 [INFO] Action for aws-eb-command-handler succeeded, returning SUCCESS
2013-10-12 12:43:09,298 [INFO] Refreshing listener credentials
2013-10-12 12:43:09,453 [INFO] Scheduling next credential refresh in 7200 seconds
2013-10-12 12:45:40,786 [INFO] Refreshing listener credentials
2013-10-12 12:45:41,005 [INFO] Scheduling next credential refresh in 7200 seconds
2013-10-12 12:45:41,177 [INFO] Received command ElasticBeanstalkCommand-AWSEBAutoScalingGroup (invocation id: 3b1df0b0-fd54-4ddc-827b-6527dddc9d70)
2013-10-12 12:45:41,177 [INFO] Running action for aws-eb-command-handler
2013-10-12 12:46:48,710 [INFO] Action for aws-eb-command-handler succeeded, returning SUCCESS
2013-10-12 13:06:02,119 [INFO] Received command ElasticBeanstalkCommand-AWSEBAutoScalingGroup (invocation id: 81c8dab0-e142-4fb9-bad2-1c4bfa4a3be5)
2013-10-12 13:06:02,119 [INFO] Running action for aws-eb-command-handler
您可以看到它接收到 4 个 ElasticBeanstalkCommand-AWSEBAutoScalingGroup 命令,并且命令的 ID 与 AWS::ElasticBeanstalk::Ext._API._Commands.CMD-Startup、Hook-PreAppDeploy 等匹配。这些命令似乎实际部署了我的Web应用程序。
非工作日志文件:
cfn-hup.log:
2013-10-12 13:16:48,661 [INFO] Refreshing listener credentials
2013-10-12 13:16:48,848 [INFO] Scheduling next credential refresh in 7200 seconds
2013-10-12 13:22:22,316 [INFO] Refreshing listener credentials
2013-10-12 13:22:22,551 [INFO] Scheduling next credential refresh in 7200 seconds
2013-10-12 13:24:54,128 [INFO] Refreshing listener credentials
2013-10-12 13:24:54,408 [INFO] Scheduling next credential refresh in 7200 seconds
2013-10-12 13:24:59,588 [INFO] Received command ElasticBeanstalkCommand-AWSEBAutoScalingGroup (invocation id: 69acfccd-2a1b-4535-b22d-377870cb4a9c)
2013-10-12 13:24:59,604 [INFO] Running action for aws-eb-command-handler
你可以看到它只接收到 1 个命令,而那个实际上是一个 CMD-TailLogs 命令,因此它与应用程序部署完全无关。因此,问题似乎在于新创建的实例根本没有接收到部署 Web 应用程序的命令。
以下是每个实例的完整日志文件转储:
有什么想法可以解决这个问题吗?我可以尝试的事情?是错误还是我做错了什么?
我的应用程序非常普通。我只添加了 1 个 .ebextension,newrelic.config,它直接来自新的 relic 文档。