Как вы можете получить версию приложения Elastic Beanstalk в своем приложении?

Мы хотим получить версию приложения с эластичным beanstalk в нашем PHP-коде. Я не вижу, чтобы EB передавал его нам в любых конфигурационных файлах сервера, которые мне кажутся странными. Кто-нибудь еще знает, как мы можем это получить?

Ответ 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). Тег версии встроен как комментарий в этот файл.

Ответ 3

Вы можете использовать AWS Elastic Beanstalk API для получения информации о вашей версии приложения.

Описать версии приложений возвращает описания для существующих версий приложений.

Пример запроса

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>

Ответ 4

В то время как лучший способ - действительно спросить AWS напрямую:

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

У меня был ограниченный успех, выведя один и тот же 4-х или 5-значный хэш с помощью:

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

Ответ 5

В приложении PHP вы можете получить его с помощью

aws elasticbeanstalk describe-environments --environment-names <environment-name>

Вы должны добавить следующие переменные среды в php script, чтобы заставить его работать.

AWS_DEFAULT_REGION AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY

Я использовал функцию putenv(), чтобы установить переменные среды и shell_exec(), чтобы получить выход json. Разработал вывод json, чтобы получить VersionLabel, которая является реальной версией приложения.

Ответ 6

Консолидируя ответы @Georgij и @IanBlenke, вы сможете найти версию.

1. Самый надежный (Манифест)

Вы можете sudo cat/opt/elasticbeanstalk/deploy/manifest

Выход:

{ "RuntimeSources": { "PLATFORM_NAME": { "app- ae22-190115_152512": { "s3url": ""}}}, "DeploymentId": 45, "Последовательный": 53}

2. Вы можете посмотреть журналы eb-активности

Во-вторых, вы можете посмотреть журналы активности. Это покажет вам только в строке журнала... Вы должны предположить, что это также была успешная установка..

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

enter image description here

Ответ 7

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

Выводит действительный идентификатор версии приложения, например app-2.15.0-31-gf4a2918 в нашем случае.

Это работает внутри любого EB EC2, не требует использования API или git-репо (некоторые развертываются с помощью zip). Полезно для отправки уведомления о недавнем развертывании.