如何确定应用程序/应用程序容器是否已在AWS弹性beanstalk上启动?

时间:2014-03-14 11:45:48

标签: amazon-web-services elastic-beanstalk

我正在编写一个通用的应用程序部署工具。它需要用户提供的应用程序并将其部署到Elastic Beanstalk。那部分是有效的。问题是用户希望将部署工具与其他操作一起使用,现在我的工具在告诉Beanstalk API启动应用程序时报告成功。

不幸的是,它在应用程序本身启动之前就会返回。因此,用户必须自己编写轮询逻辑以等待其应用程序的启动。

查看AWS Elastic Beanstalk API,我看不到任何返回任何此类状态报告指示的方法。我能找到的最接近的是DescribeEvents ......看起来很有希望,但从示例中可以看出,在环境中启动的应用程序/应用程序容器的粒度不是该API的一部分:

<DescribeEventsResponse xmlns="https://elasticbeanstalk.amazonaws.com/docs/2010-12-01/">
  <DescribeEventsResult>
    <Events>
      <member>
        <Message>Successfully completed createEnvironment activity.</Message>
        <EventDate>2010-11-17T20:25:35.191Z</EventDate>
        <VersionLabel>New Version</VersionLabel>
        <RequestId>bb01fa74-f287-11df-8a78-9f77047e0d0c</RequestId>
        <ApplicationName>SampleApp</ApplicationName>
        <EnvironmentName>SampleAppVersion</EnvironmentName>
        <Severity>INFO</Severity>
      </member>

注意:INFO级别事件是环境已创建,在环境中开始的应用程序容器的较低级别的任何内容似乎都没有报告...

我可以强制使用此工具部署的应用程序公开状态REST端点,但这会对应用程序施加限制。

我是否缺少一些API,当应用程序容器(例如Tomcat,Node等)启动时会报告...或者当容器中部署的应用程序启动时更好...但我能活下去使用应用程序容器

2 个答案:

答案 0 :(得分:1)

每个应用程序都应该暴露健康URL(否则,任何情况下,Beanstalk / ELB都会出现问题 - 它会认为实例没有响应,可能会替换)。这通常是期望200 OK的HEAD请求。

由于预计所有应用程序都会出现这种情况,因此您可以点击此URL并检查部署是否正常。我想Beanstalk控制台本身就是使用这种方法。

答案 1 :(得分:0)

您还可以使用DescribeEnvironments API调用进行轮询,该调用将为您提供环境CNAME(要检查的URL),环境健康(RED,GREEN),状态(启动|更新|就绪|终止|终止)。此API将Environment Name作为参数。所以你可以得到一个环境的描述。

API文档:http://docs.aws.amazon.com/elasticbeanstalk/latest/APIReference/API_DescribeEnvironments.html

响应中的环境描述说明:http://docs.aws.amazon.com/elasticbeanstalk/latest/APIReference/API_EnvironmentDescription.html

下面的示例回复:

<DescribeEnvironmentsResponse xmlns="https://elasticbeanstalk.amazonaws.com/docs/2010-12-01/">
  <DescribeEnvironmentsResult>
    <Environments>
      <member>
        <VersionLabel>Version1</VersionLabel>
        <Status>Available</Status>
        <ApplicationName>SampleApp</ApplicationName>
        <EndpointURL>elasticbeanstalk-SampleApp-1394386994.us-east-1.elb.amazonaws.com</EndpointURL>
        <CNAME>SampleApp-jxb293wg7n.elasticbeanstalk.amazonaws.com</CNAME>
        <Health>Green</Health>
        <EnvironmentId>e-icsgecu3wf</EnvironmentId>
        <DateUpdated>2010-11-17T04:01:40.668Z</DateUpdated>
        <SolutionStackName>32bit Amazon Linux running Tomcat 7</SolutionStackName>
        <Description>EnvDescrip</Description>
        <EnvironmentName>SampleApp</EnvironmentName>
        <DateCreated>2010-11-17T03:59:33.520Z</DateCreated>
      </member>
    </Environments>
  </DescribeEnvironmentsResult>
  <ResponseMetadata>
<RequestId>44790c68-f260-11df-8a78-9f77047e0d0c</RequestId>

在您的情况下,您可能需要阅读以下文档:

  • Monitoring Application Health
  • 您还可以为您的环境配置应用程序运行状况检查URL。默认情况下,AWS Elastic Beanstalk使用TCP:80检查您的实例。但是,使用应用程序运行状况检查URL,您可以使用所述here所述的“应用程序运行状况检查URL”选项覆盖此运行状况检查以使用HTTP:80。

使用DescribeEnvironments中的Status / Health,您可以检查是否已部署该应用程序。