Amazon Linux 2 x86_64 standard: 3.0のCodeBuild環境でPHP8.0を使う方法。
『今度の開発はPHP8.0環境にLaravel8でソース組んでるんでインフラもそれでよろしく』
そういう前提でAmazon Linux2でEC2インスタンスを作って、初期PHPが7.4系のところに手で8.0入れて有効化して、と、こっちはよかったんですが。
CodeBuildで問題発生。
どうもマネージド型イメージのAmazon Linux 2にはPHP8.0系が入っていない模様。
仕方ないのでECRイメージでPHP公式から8系を取得してしばらくやっていたものの、
【動作環境と作成環境でコンパイラが違う】ようなものなので『ヨクナイネー』となり、直すことに。
- イメージの上書き
- マネージド型イメージ
- OS Amazon Linux2
- ランタイム standard
- イメージ aws/codebuild/amazonlinux2-x86_64-standard:3.0
- イメージのバージョン このランタイムバージョンには常に最新のイメージを使用してください
- 環境タイプ Linux
- サービスロール 既存のまま
以上の環境にPHP8.0を入れることになったわけですが――
『buildspec.ymlにPHP8を入れるようにコマンドを入力すればいい』のはわかるものの、これがちっとも通らない。
Phase context status code: YAML_FILE_ERROR Message: Unknown runtime version named ‘8.0’ of php. This build image has the following versions: 7.3, 7.4
こんなありさま。
当然と言えば当然で、Amazon Linux 2 プラットフォームランタイムバージョンによると、PHP8.0はUbuntu standard:5.0でしか使えない模様。
ランタイムから入れる正攻法ではダメ、ということで。
EC2インスタンスでPHP8.0を入れたコマンドをymlにずらーっと書いて実行してみる。
Running command yum -y remove php-* Loaded plugins: ovl, priorities No Match for argument: php-* No Packages marked for removal Running command yum update -y amazon-linux-extras Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: amazon-linux-extras. Reason: exit status 1
php-*系とamazon-linux-extrasがない?
……どうも同じAmazon Linux2でもEC2インスタンスとは挙動が違う模様。
いろいろ試行錯誤するも、『EC2インスタンス同様にAmazon Linux2環境にてamazon-linux-extraを使ってPHP8.0を導入する』にたどり着けなくてギブアップ。
「先生、ダメです。どうしましょう?」
「よし、サポートセンターに相談だ」
というわけでサポートセンターに乞うたところ、最終的に以下のbuildspec.ymlができました。
version: 0.2 phases: install: runtime-versions: php: 7.4 nodejs: 12 commands: - php -v #- echo y | phpenv uninstall 7.4.29 - rm -rf $(phpenv root) - PYTHON=python2 amazon-linux-extras install php8.0 -y - PATH=/usr/bin/php:$PATH #- rm /root/.phpenv/shims/php - php -v build: commands: - composer -V
rm -rf $(phpenv root)をやっているのは、phpenvが入っているままだとcomposerがそっちで動いちゃうためです。
実際一度引っかかりまして。ええ。
この記事の内容の作業をやったのは、2022/06/16前後だったんですが。
今って、イメージ aws/codebuild/amazonlinux2-x86_64-standard:4.0があって、
そっちだとPHP8.1が使えるようになっている模様。
じゃあこの記事が全く無駄かっていうと、
将来的に『CodeBuild環境でPHPX.X使いたいけどランタイムがない』って状況に対して使えるんじゃないかなー……と。
その状況があるのかどうかは、未来に託すとして。
おつかれさまでした(੭ ᐕ)