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への接続は維持されるようになりました。