AWS ElasticBeanstalkでPlatformを変更しようと思ったがお目当てのプラットフォームに変更できない時はAWS CLI経由でやろう

PHP7.4プラットフォームでElastic Beanstalkを本番運用している奴は誰だ!俺だ!!!
という事でいい加減PHP7.4プラットフォームで動くアプリをPHP8化したい(エンジニア側の都合でDocker化は難しいらしい、Why?)との事でプラットフォームをアップデートしようと思った所、GUI経由ではなぜかAmazon Linux2023のPHP8.2でしか動かない。アプリケーションのマイグレーションの都合、PHP8.1がどうしても使いたかったのでCLIから実行して解決しましたというお話。

なぜPHP8.1がRecommendedなのに選択できないのか?

使う人が減ってきたElastic Beanstalk固有のバグかも。知らんけど。

この状態から変更が出来ない。

aws cliで解決する

作業としては2コマンド打つだけで終わります。

  • 希望のPlatformのArnを手に入れる
  • 上記で手に入れたArnを指定してupdate-environmentを実行
$ aws elasticbeanstalk list-platform-versions --filters='[{"Type":"PlatformBranchName","Operator":"begins_with","Values":["PHP"]}]'

まずこのコマンドでお目当てのPlatformのブランチ名(PHP 8.1 running on 64bit Amazon Linux 2 みたいな)を探します。
JSONのブロック内にPlatformArnが書いてあるのでコピー。

$ aws elasticbeanstalk update-environment --environment-name xxxx-env --platform-arn "arn:aws:elasticbeanstalk:ap-northeast-1::platform/PHP 8.1 running on 64bit Amazon Linux 2/3.5.10"

その後 `update-environment` コマンドでPlatformArnだけ与えて実行してあげると、環境の状態のJSONが返ってくるのでWebコンソールから確認してみてください。

余談

ダウングレードも出来るので、間違ってPlatformを新しくしちゃった場合もCLIが使える。

参考

AWS-CLIのリファレンスって割と不親切な作りしてるよね