【问题标题】:How can you get the Elastic Beanstalk Application Version in your application?如何在您的应用程序中获取 Elastic Beanstalk 应用程序版本?
【发布时间】:2013-11-23 12:52:15
【问题描述】:

我们希望能够在我们的 PHP 代码中检索弹性 beanstalk 应用程序版本。我没有看到 EB 在任何服务器配置文件中将它传递给我们,我觉得这很奇怪。还有其他人知道我们如何能够得到这个吗?

【问题讨论】:

  • AFAIK,当 Elastic Beanstalk 将您的应用程序部署到云时,它会使用 git archive 命令创建一个存档。生成的存档文件没有任何存储库元数据。

标签: amazon-web-services amazon-elastic-beanstalk


【解决方案1】:

至少对于 Docker 容器 - 您可以使用存储在 /opt/elasticbeanstalk/deploy/manifest 中的信息。

【讨论】:

  • 适用于我的烧瓶图片
【解决方案2】:

我自己一直在寻找解决方案。

目前,至少,以下工作:

unzip -z "${EB_CONFIG_SOURCE_BUNDLE}" | tail -n1

更详细地说,$EB_CONFIG_SOURCE_BUNDLE 包含您应用程序的 zip 存档的路径(即/opt/elasticbeanstalk/deploy/appsource/source_bundle)。版本标记作为注释嵌入在此文件中。

【讨论】:

  • 如果有人偶然发现这一点,这显然不适用于 Ruby 容器。
  • @mentat - envvar 是否不存在或文件是否丢失,或两者兼而有之?预计每个 lang 环境都有自己的部署实现,但我原以为将代码放到服务器上的过程是一致的。如果您找到解决方案,请跟进,或贡献github.com/apancutt/aws-eb-newrelic-deploynotify
  • envvar 存在,但看起来输出可能是一个散列。我将仔细查看实际文件以查看它的嵌入位置。你是在使用 aws git 推送还是别的什么?
  • 是的,使用 git 部署 (aws.push)。哈希是 Elastic Beanstalk 用作版本标签的最新 git 提交 - 至少对于 PHP 应用程序而言。
  • unzip -z "/opt/elasticbeanstalk/deploy/appsource/source_bundle" | awk 'NR==2 { printf("%.7s\n", $1) }' 等价于 git rev-parse --short HEAD
【解决方案3】:

根据@Georgij 和@IanBlenke 的答案,您可以通过以下方式找到该版本。

1。最可靠(清单)

你可以sudo cat /opt/elasticbeanstalk/deploy/manifest

输出:

{"RuntimeSources":{"PLATFORM_NAME":{"app-ae22-190115_152512":{"s3url":""}}},"DeploymentId":45,"Serial":53}

2。您可以查看 eb-activity 日志

其次,您可以查看 eb-activity 日志。这只会在日志行中显示...您必须假设它也已成功安装..

tail /var/log/eb-activity.log | grep -i "app-.*@"

【讨论】:

  • 清单文件在部署期间可用吗?如果是这样,那似乎是最好的。
【解决方案4】:

您可以使用AWS Elastic Beanstalk API 来检索您的应用程序版本信息。

Describe Application Versions 返回现有应用程序版本的描述。

示例请求

https://elasticbeanstalk.us-east-1.amazon.com/?ApplicationName=SampleApp
&Operation=DescribeApplicationVersions
&AuthParams 

示例响应

<DescribeApplicationVersionsResponse xmlns="https://elasticbeanstalk.amazonaws.com/docs/2010-12-01/">
  <DescribeApplicationVersionsResult>
    <ApplicationVersions>
      <member>
        <SourceBundle>
          <S3Bucket>amazonaws.com</S3Bucket>
          <S3Key>sample.war</S3Key>
        </SourceBundle>
        <VersionLabel>Version1</VersionLabel>
        <Description>description</Description>
        <ApplicationName>SampleApp</ApplicationName>
        <DateCreated>2010-11-17T03:21:59.161Z</DateCreated>
        <DateUpdated>2010-11-17T03:21:59.161Z</DateUpdated>
      </member>
    </ApplicationVersions>
  </DescribeApplicationVersionsResult>
  <ResponseMetadata>
    <RequestId>773cd80a-f26c-11df-8a78-9f77047e0d0c</RequestId>
  </ResponseMetadata>
</DescribeApplicationVersionsResponse>

【讨论】:

    【解决方案5】:

    虽然最好的方法是直接询问 AWS:

    aws elasticbeanstalk describe-environments  | \
        jq -r '.Environments | .[] | .EnvironmentName + " " + .VersionLabel'
    

    我使用以下方法推断相同的 4 或 5 位哈希的成功有限:

    git rev-parse --short=4 $(git log -1 --pretty=format:%h)
    

    【讨论】:

      【解决方案6】:

      tail /var/log/eb-activity.log | grep -i "\[Application update .*\] : Completed activity." | tail -1 | sed -E 's/.*Application update (.*)@.*/\1/'

      在我们的例子中输出实际的应用版本 ID,例如 app-2.15.0-31-gf4a2918

      这可以在任何 EB EC2 内部工作,不需要 API 命中或 git repo(一些通过 zip 部署)。用于发送有关最近部署的通知。

      【讨论】:

      • 这应该是公认的答案,就像一个魅力!
      【解决方案7】:

      在 PHP 应用程序中,您可以使用

      aws elasticbeanstalk describe-environments --environment-names &lt;environment-name&gt;

      您应该在 php 脚本中添加以下环境变量以使其正常工作。

      AWS_DEFAULT_REGION AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY

      我使用putenv() 函数设置环境变量和shell_exec() 获取json 输出。解析 json 输出得到VersionLabel,这是实际的应用程序版本。

      【讨论】:

        猜你喜欢
        • 2017-11-28
        • 2012-12-31
        • 2015-03-05
        • 1970-01-01
        • 1970-01-01
        • 2018-03-18
        • 2018-12-27
        • 2015-06-12
        • 1970-01-01
        相关资源
        最近更新 更多