Alternative Architecture DOJO

オルターブースのクラウドネイティブ特化型ブログです。

Azure での PHP 8.0 の実行環境を整理してみる

こんにちは。MLBお兄さんこと松村です。
先日、マイクロソフトがPHP 8.0以降の正式サポートを中止するというニュースがありました。

japan.zdnet.com

PHP 8.0に関して、Windows向けにビルドされたPHPが提供されなくなるため、Microsoft AzureのWindowsをプラットフォームとするサービスでも同様の状態となる(と思います)。

自分はC#を主に使いますが、PHPも好きだし業務で使う機会があります。
そこで今回はMicrosoft AzureでPHP 8.0アプリケーションを実行する際に使用するサービスを紹介します。

Virtual Machine

azure.microsoft.com

Linuxの仮想マシンにPHPをインストールして実行することができるサービスです。
Azureに限らず、いちばん一般的な方法ではないでしょうか。
ただし仮想マシンは IaaS であるため、利用者側のメンテナンス範囲が広いです。

f:id:tech-tsubaki:20200719161254p:plain

Web App for Containers

azure.microsoft.com

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 .

実行結果

f:id:tech-tsubaki:20200719161315p:plain

Azure Container Instances (ACI)

azure.microsoft.com

Azure Container Instances (ACI) は、前述の Web App for Containers よりも素早くコンテナーを実行するためのサービスです。
単一のコンテナーを実行することはもちろんのこと、コンテナーグループという仕組みを用いることで複数のコンテナーを実行することも可能です。

パブリックIPアドレスが割り当てられ、公開ポートを指定することで、WebアプリケーションもACIで実行することができます。
ただし個人的には、ACIでWebアプリケーション本体を動かすより、独立したバッチアプリケーションを実行するような使い方をオススメしています。

実行結果

f:id:tech-tsubaki:20200719161336p:plain

コンテナーオーケストレーションサービス

PHPをコンテナーで動かすということは、もちろんコンテナーのオーケストレーションサービスでもPHPは動きますよね。
Azureには2つのオーケストレーションサービスが提供されています。

  1. Azure Kubernetes Service (AKS)
  2. Azure Service Fabric

Azure Functionsはどうなの?

サーバーレスサービスであるAzure Functionsでは、過去にPHPが試験的(Experimental)にサポートされていた時期がありました。
私も過去にPHPでAzure Functionsを実装することについて話したことがあります。

しかし残念ながら、現在はPHPは試験的にもサポートされていない状態となってしまいました。
いつ試験的サポートが外れてしまったのか、公式な情報を見つけることはできませんでしたが、FunctionsのドキュメントからPHPが外れたのは2019年12月でした。

github.com

まとめ

PHP 7.2/7.3/7.4がサポートされている間はマイクロソフトもサポートを続けるということですので、Web App (Windows)でも当面はPHPアプリケーションを動かすことができます。
しかし今回のアナウンスを考慮すると、別のサービスに移行することを検討していったほうが良いですね。

私のオススメは Web App for Containers です。
デプロイスロット、デプロイセンター、マネージドIDなど、Web App (Windows)で利用できる機能が利用できるのでとても便利です。