AzureのApp Service上で、Laravelを使ったWebサービスを構築していたところ、DBにはMySQL In Appを使っていたのですが、あるとき急に接続できなくなりました。
調査してみると、どうもMySQL In Appはポート番号が変わることがあるそうです。最初はそんな馬鹿なと思いましたが、AzureはVM上で動作しており、パフォーマンスの調整のため、リソースを休止したり起動したりするため、ポート番号が変わってしまうとのこと。
MySQL In Appの接続情報は、 D:\home\data\mysql\
MYSQLCONNSTR_localdb.txt に記述されていましたので、それをLaravelの設定ファイルにも記述していました。
しかし、このファイルの内容は永続的ではないので、別の方法に変更することにします。
MySQL In Appの設定情報を確認してみると、接続文字列は環境変数「MYSQLCONNSTR_localdb」で取得できるようになっています。

そこでLaravelのプログラムを下記のように修正しました。
修正したファイルは config/database.php です。
<?php // 環境変数からポート番号を調べ、$portに代入 $port = env('DB_PORT', '3306'); $localdb = getenv('MYSQLCONNSTR_localdb'); if(isset($localdb)){ if(preg_match('/Data Source=127.0.0.1:([0-9]*);/', $localdb, $tmps)){ $port = $tmps[1]; } } return [ (中略) 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => $port, (後略)
これでポート番号が知らないうちに変わっても、DBへの接続は維持されるようになりました。