ハマログ

株式会社イーツー・インフォの社員ブログ

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使いたいけどランタイムがない』って状況に対して使えるんじゃないかなー……と。
その状況があるのかどうかは、未来に託すとして。

おつかれさまでした(੭ ᐕ)

AWSCodeBuildPHP

  Y.W   2022年8月8日


関連記事

RDS for MySQLからAuroraに移行しました

RDS for MySQLで運用していたデータベースをAuroraに移行しました…

php+nginxでphp.iniを変更したらphp-fpmも再起動しよう

どーも、ゆうたです。 ちょっと前に健康診断を受けたら「動脈硬化のリスク有り」でC…

composer updateでthe requested PHP extension dom is missing from your system.

新しい環境で、composer update(install) を実行したところ…


← 前の投稿

次の投稿 →