Изменение профиля экземпляра на эластичном бобовом стебле
У меня работает эластичный бобовый стебель с профилем экземпляра по умолчанию aws-elasticbeanstalk-ec2-role
, Приложение использует закрытые ключи SSH для доступа к внешним ресурсам во время установки, что означает, что я использую .ebextensions config file
скопировать материал из S3.
Однако по разным причинам мне нужно изменить профиль экземпляра, но я обнаружил, что это удивительно сложно, возможно, потому, что мой код имеет зависимости от профиля экземпляра, и кажется, что изменение конфигурации через веб-консоль AWS будет успешным, только если приложение успешно разворачивается, когда изменение конфигурации запускает новый экземпляр (изменение профиля экземпляра приводит к запуску нового экземпляра, а старый прекращается).
Я думаю, что ключевой вопрос заключается в том, что мой .ebextensions
файл ссылается на профиль экземпляра (aws-elasticbeanstalk-ec2-role
):
S3Auth:
buckets:
- <my-bucket>
roleName:
? "Fn::GetOptionSetting"
:
DefaultValue: aws-elasticbeanstalk-ec2-role
Namespace: "aws:asg:launchconfiguration"
OptionName: IamInstanceProfile
type: s3
Если я изменяю профиль экземпляра через консоль, запускается новый экземпляр и развертывается мое приложение, которое завершается ошибкой, поэтому изменение конфигурации отменяется. Если я сначала поменяю .ebextensions
использовать новую роль, развертывание которой завершится неудачей, так как указанный профиль экземпляра не соответствует тому, что в данный момент имеет EB. И даже если сначала развернуть (что, конечно, не удастся), а затем изменить конфигурацию, похоже, что вновь развернутая (отказавшая) версия не будет использоваться, но вместо этого EB, вероятно, вернется к предыдущей версии - так что это похоже на подвох 22 сценария.
Решения, которые я нашел,
- Создайте новую среду с нуля и укажите профиль экземпляра с самого начала, используя
$ eb create -ip <instance profile>
Это работает, но может быть крайне нежелательно прекращать работу существующих сред для выпуска CNAME и т. Д., Чтобы можно было заново создавать среды с нуля.
- Разверните фиктивное приложение Hello World без зависимостей в профиле экземпляра, затем измените профиль экземпляра в веб-консоли, а затем разверните реальное приложение, используя новый профиль экземпляра.
Теперь мои вопросы.
Поскольку кажется, что проблема в том, что изменение профиля экземпляра и изменение приложения должны выполняться атомарно, есть ли способ изменить профиль экземпляра как часть
eb deploy
команда, например, указав профиль экземпляра через.elasticbeanstalk/config.yml
?Есть ли способ создать
.ebextensions
Конфигурационный файл с правилом аутентификации S3, который напрямую не ссылается на используемый профиль экземпляра (который в любом случае должен совпадать с тем, что имеет EB!), а скорее "использует текущий профиль экземпляра"? Это кажется немного излишним, что.ebextensions
файлы должны указывать, с каким профилем экземпляра аутентифицироваться, когда единственный, который когда-либо будет пригоден для использования, - это тот, который на самом деле хранит EB?Есть ли другой способ обойти эту проблему?