こんにちは。MLBお兄さんこと松村です。
先日、マイクロソフトがPHP 8.0以降の正式サポートを中止するというニュースがありました。
PHP 8.0に関して、Windows向けにビルドされたPHPが提供されなくなるため、Microsoft AzureのWindowsをプラットフォームとするサービスでも同様の状態となる(と思います)。
自分はC#を主に使いますが、PHPも好きだし業務で使う機会があります。
そこで今回はMicrosoft AzureでPHP 8.0アプリケーションを実行する際に使用するサービスを紹介します。
Virtual Machine
Linuxの仮想マシンにPHPをインストールして実行することができるサービスです。
Azureに限らず、いちばん一般的な方法ではないでしょうか。
ただし仮想マシンは IaaS であるため、利用者側のメンテナンス範囲が広いです。
Web App for Containers
WindowsとLinuxのコンテナーをデプロイして実行することができるPaaSになります。
Dockerhubもしくは独自のコンテナーレジストリーにコンテナーイメージを用意し、Web App for Containersにデプロイすることで実行することができます。
Web App(Windows)と同様に、マネージド環境であり、Azureポータル上で環境変数や接続文字列を定義することができます。
今回はサンプルコードとして下記のPHP 8.0のコードを使用し、Azure Container Registry (ACR) の機能である「ACRタスク」を使ってコンテナーイメージを用意しました。
index.php
<?php phpinfo();
Dockerfile
FROM php:8.0-rc-apache EXPOSE 80 COPY index.php /var/www/html
ACR Task
$ ls -al total 16 drwxr-xr-x 2 tkmbmbr tkmbmbr 4096 Jul 19 05:45 . drwxr-xr-x 4 tkmbmbr tkmbmbr 4096 Jul 19 05:41 .. -rw-r--r-- 1 tkmbmbr tkmbmbr 61 Jul 19 06:10 Dockerfile -rw-r--r-- 1 tkmbmbr tkmbmbr 16 Jul 19 05:54 index.php $ az acr build \ --image sample/phpinfo:v1 \ --registry {acr-name} \ --file Dockerfile .
実行結果
Azure Container Instances (ACI)
Azure Container Instances (ACI) は、前述の Web App for Containers よりも素早くコンテナーを実行するためのサービスです。
単一のコンテナーを実行することはもちろんのこと、コンテナーグループという仕組みを用いることで複数のコンテナーを実行することも可能です。
パブリックIPアドレスが割り当てられ、公開ポートを指定することで、WebアプリケーションもACIで実行することができます。
ただし個人的には、ACIでWebアプリケーション本体を動かすより、独立したバッチアプリケーションを実行するような使い方をオススメしています。
実行結果
コンテナーオーケストレーションサービス
PHPをコンテナーで動かすということは、もちろんコンテナーのオーケストレーションサービスでもPHPは動きますよね。
Azureには2つのオーケストレーションサービスが提供されています。
Azure Functionsはどうなの?
サーバーレスサービスであるAzure Functionsでは、過去にPHPが試験的(Experimental)にサポートされていた時期がありました。
私も過去にPHPでAzure Functionsを実装することについて話したことがあります。
しかし残念ながら、現在はPHPは試験的にもサポートされていない状態となってしまいました。
いつ試験的サポートが外れてしまったのか、公式な情報を見つけることはできませんでしたが、FunctionsのドキュメントからPHPが外れたのは2019年12月でした。
まとめ
PHP 7.2/7.3/7.4がサポートされている間はマイクロソフトもサポートを続けるということですので、Web App (Windows)でも当面はPHPアプリケーションを動かすことができます。
しかし今回のアナウンスを考慮すると、別のサービスに移行することを検討していったほうが良いですね。
私のオススメは Web App for Containers です。
デプロイスロット、デプロイセンター、マネージドIDなど、Web App (Windows)で利用できる機能が利用できるのでとても便利です。