Elastic Beanstalk が Windows Server 2016 に対応したので、既存の環境を 2012 R2 などから 2016 へアップデートしたいことが多いと思いますが、マネジメントコンソールからは行えません。
前に書いた時はアップデートする方法はないと書きましたが、AWS CLI を使うと可能でした。
これまでもマネジメントコンソールに変更というボタンはありました。
ちなみにマネジメントコンソールから変更できるのは、古いプラットフォームバージョン向けなので、今の時代では使う必要がない完全に無縁の長物です。
AWS CLI を使って Solution Stack と、カスタム AMI を使っている場合は ImageId を同時に切り替えれば良さそうです。この辺りは今後検証をしようかと思います。
使用するのは elasticbeanstalk update-environment コマンドです。
update-environment — AWS CLI 1.19.55 Command Reference
Solution Stack として設定可能な値は以下の通りです。Server Core を使う機会の方が多そうです。
- 64bit Windows Server 2016 v1.2.0 running IIS 10.0
- 64bit Windows Server Core 2016 v1.2.0 running IIS 10.0
作業自体は更新したい Environment Id を指定して、update-environment を実行するだけです。
aws elasticbeanstalk update-environment --environment-id xxx \ --solution-stack-name "64bit Windows Server Core 2016 v1.2.0 running IIS 10.0"
ImageId を指定する場合は --option-settings を追加すればよいと思います。
実際にコマンドを実行しても、返ってくる値は古いプラットフォームのままですが、処理自体は問題なく進んでいます。ローリングアップデートを有効にしておけばダウンタイム無しでの入れ替えが可能です。
数分後にはマネジメントコンソールでの表示が Windows Server 2016 に変わっているはずです。
これで作業は完了です。今回のように新しい OS がリリースされた時以外にも、フルの Windows Server から Server Core への切り替えを行う場合にも同じ方法が使えます。
環境を新しく作って CNAME スワップなど行わなくても、Auto Scaling Group で対応できて便利です。