しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

既存の Elastic Beanstalk を Windows Server 2016 へアップデートする

Elastic Beanstalk が Windows Server 2016 に対応したので、既存の環境を 2012 R2 などから 2016 へアップデートしたいことが多いと思いますが、マネジメントコンソールからは行えません。

前に書いた時はアップデートする方法はないと書きましたが、AWS CLI を使うと可能でした。

これまでもマネジメントコンソールに変更というボタンはありました。

f:id:shiba-yan:20170710001540p:plain

ちなみにマネジメントコンソールから変更できるのは、古いプラットフォームバージョン向けなので、今の時代では使う必要がない完全に無縁の長物です。

f:id:shiba-yan:20170710001623p:plain

AWS CLI を使って Solution Stack と、カスタム AMI を使っている場合は ImageId を同時に切り替えれば良さそうです。この辺りは今後検証をしようかと思います。

使用するのは elasticbeanstalk update-environment コマンドです。

update-environment — AWS CLI 1.11.117 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 を追加すればよいと思います。

実際にコマンドを実行しても、返ってくる値は古いプラットフォームのままですが、処理自体は問題なく進んでいます。ローリングアップデートを有効にしておけばダウンタイム無しでの入れ替えが可能です。

f:id:shiba-yan:20170710002248p:plain

数分後にはマネジメントコンソールでの表示が Windows Server 2016 に変わっているはずです。

f:id:shiba-yan:20170710002426p:plain

これで作業は完了です。今回のように新しい OS がリリースされた時以外にも、フルの Windows Server から Server Core への切り替えを行う場合にも同じ方法が使えます。

環境を新しく作って CNAME スワップなど行わなくても、Auto Scaling Group で対応できて便利です。