リリース2週間前にAppServiceのスロットが動かなくてなって絶望している

## 概要

1. AppServiceを立てた
1. スロット作った
1. スロットのswapしてみた
1. 片方のスロットだけ動かなくなった:innocent:
1. 絶望

## 詳細な構成

### アプリケーション

<details><summary>アプリケーションの詳細な構成</summary><div>

+ ASP .NET Core 3.1.0
+ Entity Framework Core 3.1.0
+ ASP .NET Core Identity Entity Framework 3.1.0
+ Pomelo Entity Framework Core 3.1.0
+ DBへの接続文字列はappsettings.jsonに記載

```Startup.cs
namespace Web
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            // 中略

            services.AddDbContextPool<HogeDbContext>(options =>
            {
                options.UseMySql(Configuration.GetConnectionString("Database"), builder =>
                {
                    builder.EnableRetryOnFailure(5, TimeSpan.FromSeconds(10), null);
                });
                options.UseLazyLoadingProxies();
            }, poolSize: 50);

            // 中略

        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment() || env.IsStaging())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            }
            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseSession();
            app.UseRouting();

            app.UseAuthentication();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                // 中略
            });
        }

    }
}

```

</div></details>

### Azure AppService

<details><summary>App Serviceの詳細な設定</summary><div>

+ App Service プラン
    + S1:1(Windows)
+ 構成
    + アプリケーション設定
        + ASPNETCORE_ENVIRONMENT
            + Staging
            + [ ] デプロイスロットの設定
        + WEBSITE_TIME_ZONE
            + Tokyo Standard Time
            + [ ] デプロイスロットの設定
        + DIAGNOSTICS_AZUREBLOBCONTAINERSASURL
            + 診断設定で自動的に設定された値
            + [ ] デプロイスロットの設定
        + DIAGNOSTICS_AZUREBLOBRETENTIONINDAYS
            + 診断設定で自動的に設定された値
            + [ ] デプロイスロットの設定
    + 全般設定
        + スタック
            + .NET Core
        + プラットフォーム
            + 32Bit
        + マネージドパイプラインバージョン
            + 統合
        + FTPの状態
            + 無効
        + HTTPバージョン
            + 2.0
        + Webソケット
            + オフ
        + 常時接続
            + オン
        + ARRアフィニティ
            + オフ
        + リモートデバッグ
            + オフ
        + 着信証明書が必要です
            + オフ
    + ネットワーク
        + VNet 統合
            + ほげVNetのふがSubnet
+ デプロイスロット
    + 構成
        + アプリケーション設定
            + ASPNETCORE_ENVIRONMENT
                + Staging
                + [ ] デプロイスロットの設定
            + WEBSITE_TIME_ZONE
                + Tokyo Standard Time
                + [ ] デプロイスロットの設定
    + 全般設定
        + スタック
            + .NET Core
        + プラットフォーム
            + 32Bit
        + マネージドパイプラインバージョン
            + 統合
        + FTPの状態
            + 無効
        + HTTPバージョン
            + 2.0
        + Webソケット
            + オフ
        + 常時接続
            + オン
        + ARRアフィニティ
            + オフ
        + リモートデバッグ
            + オフ
        + 自動スワップが有効
            + オフ
        + 着信証明書が必要です
            + オフ
    + ネットワーク
        + VNet 統合
            + ほげVNetのふがSubnet

</div></details>

### Azure Database for MySQL

<details><summary>Azure Database for MySQLの詳細</summary><div>

+ パフォーマンス構成
    + 汎用目的、2 個の仮想コア、50 GB
+ 接続のセキュリティ
    + Azureサービスへのアクセスを許可
        + オフ
    + ほげVNetのふがSubnetが取れる範囲のIPアドレス全許可
    + VNETルール
        + ほげVNetのふがSubnet追加
+ サーバーパラメーター
    + max_connections
        + 600
    + max_user_connections
        + 0

</div></details>

## やったこと

1. Azure DevOpsのPipelineにてビルドしてデプロイスロットにリリース
1. デプロイスロットで動くことを確認
1. Azure DevOpsのPipelineにてデプロイスロットをSwap
1. 運用スロットで動くことを確認
1. デプロイスロットがデフォルトページになっていることを確認
1. Azure DevOpsのPipelineにてデプロイスロットにリリース
1. 運用スロット、デプロイスロットの両方で動いていることを確認
1. 何度かデプロイ、Swapを実行して双方のスロットが動いていることを確認
1. 数日後にSwap
1. 運用スロットだけ動かない

## 現象

MySQLにうまくつなげない模様

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135881/e88d5488-6765-29b9-dae6-9c0cd764cde6.png)

<details><summary>Stack trace</summary><div>

```
An unhandled exception occurred while processing the request.
OperationCanceledException: The operation was canceled.
    System.Threading.CancellationToken.ThrowOperationCanceledException()

MySqlException: Connect Timeout expired. All pooled connections are in use.
    MySql.Data.MySqlClient.MySqlConnection.CreateSessionAsync(ConnectionPool pool, Nullable<IOBehavior> ioBehavior, CancellationToken cancellationToken) in MySqlConnection.cs, line 670

RetryLimitExceededException: Maximum number of retries (5) exceeded while executing database operations with 'MySqlRetryingExecutionStrategy'. See inner exception for the most recent failure.
    Microsoft.EntityFrameworkCore.Storage.ExecutionStrategy.ExecuteImplementationAsync<TState, TResult>(Func<DbContext, TState, CancellationToken, Task<TResult>> operation, Func<DbContext, TState, CancellationToken, Task<ExecutionResult<TResult>>> verifySucceeded, TState state, CancellationToken cancellationToken)


OperationCanceledException: The operation was canceled.
    System.Threading.CancellationToken.ThrowOperationCanceledException()
    System.Threading.SemaphoreSlim.WaitUntilCountOrTimeoutAsync(TaskNode asyncWaiter, int millisecondsTimeout, CancellationToken cancellationToken)
    MySqlConnector.Core.ConnectionPool.GetSessionAsync(MySqlConnection connection, IOBehavior ioBehavior, CancellationToken cancellationToken) in ConnectionPool.cs
    MySql.Data.MySqlClient.MySqlConnection.CreateSessionAsync(ConnectionPool pool, Nullable<IOBehavior> ioBehavior, CancellationToken cancellationToken) in MySqlConnection.cs


MySqlException: Connect Timeout expired. All pooled connections are in use.
    MySql.Data.MySqlClient.MySqlConnection.CreateSessionAsync(ConnectionPool pool, Nullable<IOBehavior> ioBehavior, CancellationToken cancellationToken) in MySqlConnection.cs
    MySql.Data.MySqlClient.MySqlConnection.OpenAsync(Nullable<IOBehavior> ioBehavior, CancellationToken cancellationToken) in MySqlConnection.cs
    Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnectionAsync(bool errorsExpected, CancellationToken cancellationToken)
    Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnectionAsync(bool errorsExpected, CancellationToken cancellationToken)
    Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenAsync(CancellationToken cancellationToken, bool errorsExpected)
    Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlRelationalConnection.OpenAsync(CancellationToken cancellationToken, bool errorsExpected)
    Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
    Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable<T>+AsyncEnumerator.InitializeReaderAsync(DbContext _, bool result, CancellationToken cancellationToken)
    Microsoft.EntityFrameworkCore.Storage.ExecutionStrategy.ExecuteImplementationAsync<TState, TResult>(Func<DbContext, TState, CancellationToken, Task<TResult>> operation, Func<DbContext, TState, CancellationToken, Task<ExecutionResult<TResult>>> verifySucceeded, TState state, CancellationToken cancellationToken)
```

</div></details>


## 原因調査

### DBの接続設定が間違っていないか調査

運用スロットとデプロイスロットのConnectionStringsが間違っていないか、他のを読んでいないかと指摘を受けたので、一応念のために検証しました。

1. 両スロットの構成 -> アプリケーション設定 -> 接続文字列 にConnectionStringsを直接書く
2. それぞれのスロットにアクセスする
3. なぜか運用スロットが正常にうごいてデプロイスロットで上記エラーが出るようになる
4. 運用スロットとデプロイスロットでDBへログインするユーザーを別々で設定する
5. 手元の端末からDBに直接アクセスし`show processlist;`してみる
6. 運用スロットとデプロイスロットのユーザーがアクセスしていることが分かった
7. エラーを吐いているデプロイスロットのユーザーが大量にコネクションを張っていることも分かった(しかもすべてのInfoがnull)

接続情報が間違っているわけではなさそう:frowning2:

### DBの設定が間違っていないか調査

DBの設定が怪しかったのでもう1台DBを立てて検証した

1. 運用スロットのDB接続先が運用DBであることを確認
2. デプロイスロットのDB接続先を新規で作成したデプロイ用DBに設定
3. 運用スロットが正常に動いていてデプロイスロットで上記エラーが出ることを確認
4. 手元の端末からそれぞれのDBに直接アクセスし、それぞれのDBにそれぞれのスロットからアクセスがあることを確認
5. 運用スロットのDB接続先をデプロイ用DBに設定
6. デプロイスロットのDB接続先を運用DBに設定
7. 運用スロットが正常に動いていてデプロイスロットで上記エラーが出ることを確認

DBの設定が悪ければ、DB接続先を入れ替えた時にエラーが発生するスロットも変わるはずなのでこれでもなさそう:frowning2:

### デプロイしているソースコードに差分が無いか調査

同じコードで検証している**つもり**になっている可能性があるので次の手順で検証

1. AppServiceのポータルからスロットスワップを実施
2. 運用スロットが正常に動いていてデプロイスロットで上記エラーが出ることを確認
3. もう一度スロットスワップを実施
4. 運用スロットが正常に動いていてデプロイスロットで上記エラーが出ることを確認

Swapしているので同じソースコードで検証しているためこれでもなさそう:frowning2:

### VMにMySQLを立ててクエリログを引っ張ってみる(2020/01/23追記)

MySQLがどのような挙動をしているのか調査するためにVM上にMySQLを立て、問題の発生しているスロットのDB接続先をVM上のMySQLにしてみた

1. VMにMySQLを立てる
2. デプロイスロットが接続できない状態なのでデプロイスロットのDB接続先をVMのMySQLに変更
3. MySQLのクエリログを取ってみる

```
2020-01-23T12:18:17.471261Z         9 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:18.164572Z         9 Query     SET NAMES utf8mb4
2020-01-23T12:18:18.480101Z         9 Query     SELECT `t`.`id`, クエリ以下略
2020-01-23T12:18:19.899904Z         9 Query     SET NAMES utf8mb4
2020-01-23T12:18:19.911427Z        10 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.911476Z        11 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.911438Z        12 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.911739Z        13 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.911760Z        14 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.911920Z        16 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.911968Z        15 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.912109Z        17 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.912271Z        18 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.919228Z        18 Query     SET NAMES utf8mb4
2020-01-23T12:18:19.919255Z        19 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.919398Z        20 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.919423Z        21 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.919596Z        22 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.919645Z        23 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.920017Z        24 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.920060Z        26 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.920221Z        27 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.920275Z        32 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.920222Z        25 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.920420Z        28 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.920648Z        30 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.921293Z        33 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.921330Z        29 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.921303Z        31 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.921408Z        34 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.929648Z        35 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:19.959218Z        71 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.148043Z        36 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.247394Z        39 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.247494Z        37 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.247727Z        40 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.247758Z        38 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.247727Z        41 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.248091Z        43 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.248181Z        42 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.248314Z        45 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.248395Z        44 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.248689Z        46 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.248729Z        47 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.248955Z        49 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.249378Z        51 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.249384Z        48 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.250856Z        53 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.255575Z        53 Query     SET NAMES utf8mb4
2020-01-23T12:18:20.255709Z        50 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256024Z        55 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256033Z        54 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256200Z        52 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256237Z        57 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256502Z        59 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256507Z        58 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256706Z        56 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256816Z        61 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.256831Z        60 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.257239Z        62 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.257445Z        63 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.257579Z        64 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.257865Z        65 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.257906Z        66 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.258184Z        67 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.258329Z        68 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.258603Z        69 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.317143Z        70 Connect   hoge@23.100.98.124 on hogehoge_production using SSL/TLS
2020-01-23T12:18:20.318519Z         9 Query     SELECT `t`.`id`, クエリ以下略
2020-01-23T12:18:20.327938Z        13 Query     SET NAMES utf8mb4
2020-01-23T12:18:20.327977Z        14 Query     SET NAMES utf8mb4
2020-01-23T12:18:20.327945Z        11 Query     SET NAMES utf8mb4
2020-01-23T12:18:20.328082Z        12 Query     SET NAMES utf8mb4
2020-01-23T12:18:20.328049Z        10 Query     SET NAMES utf8mb4
2020-01-23T12:18:20.328242Z        16 Query     SET NAMES utf8mb4
2020-01-23T12:18:20.328251Z        15 Query     SET NAMES utf8mb4
2020-01-23T12:18:20.328370Z        17 Query     SET NAMES utf8mb4
2020-01-23T12:18:20.328480Z        19 Query     SET NAMES utf8mb4
```

なんかすごい接続しにきている・・・

`show processlist;`を実行してみた結果

```
+-----+----------------------+----------------------------------------------+--------------------+---------+------+------------------------+------------------+
| Id  | User                 | Host                                         | db                 | Command | Time | State                  | Info             |
+-----+----------------------+----------------------------------------------+--------------------+---------+------+------------------------+------------------+
|   4 | event_scheduler      | localhost                                    | NULL               | Daemon  |  617 | Waiting on empty queue | NULL             |
| 133 | hoge                 | 122-223-58-229.aichi.fdn.vectant.ne.jp:31353 | NULL               | Query   |    0 | starting               | show processlist |
| 134 | hoge                 | 23.100.98.124:22084                          | hoge_production | Sleep   |    1 |                        | NULL             |
| 135 | unauthenticated user | 23.100.98.124:22080                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 136 | unauthenticated user | 23.100.98.124:22081                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 137 | unauthenticated user | 23.100.98.124:22083                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 138 | unauthenticated user | 23.100.98.124:30912                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 139 | unauthenticated user | 23.100.98.124:30913                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 140 | unauthenticated user | 23.100.98.124:22085                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 141 | unauthenticated user | 23.100.98.124:22086                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 142 | unauthenticated user | 23.100.98.124:22087                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 143 | unauthenticated user | 23.100.98.124:22088                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 144 | unauthenticated user | 23.100.98.124:22089                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 145 | unauthenticated user | 23.100.98.124:22090                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 146 | unauthenticated user | 23.100.98.124:22091                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 147 | unauthenticated user | 23.100.98.124:22092                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 148 | unauthenticated user | 23.100.98.124:22094                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 149 | unauthenticated user | 23.100.98.124:22103                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 150 | unauthenticated user | 23.100.98.124:22104                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 151 | unauthenticated user | 23.100.98.124:22105                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 152 | unauthenticated user | 23.100.98.124:22106                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 153 | unauthenticated user | 23.100.98.124:22107                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 154 | unauthenticated user | 23.100.98.124:22108                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 155 | unauthenticated user | 23.100.98.124:22109                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 156 | unauthenticated user | 23.100.98.124:22110                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 157 | unauthenticated user | 23.100.98.124:22111                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 158 | unauthenticated user | 23.100.98.124:22112                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 159 | unauthenticated user | 23.100.98.124:22113                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 160 | unauthenticated user | 23.100.98.124:22114                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 161 | unauthenticated user | 23.100.98.124:22115                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 162 | unauthenticated user | 23.100.98.124:22116                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 163 | unauthenticated user | 23.100.98.124:22117                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 164 | unauthenticated user | 23.100.98.124:22118                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 165 | unauthenticated user | 23.100.98.124:22119                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 166 | unauthenticated user | 23.100.98.124:22120                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 167 | unauthenticated user | 23.100.98.124:22121                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 168 | unauthenticated user | 23.100.98.124:22122                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 169 | unauthenticated user | 23.100.98.124:22123                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 170 | unauthenticated user | 23.100.98.124:22124                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 171 | unauthenticated user | 23.100.98.124:22125                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 172 | unauthenticated user | 23.100.98.124:22126                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 173 | unauthenticated user | 23.100.98.124:22127                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 174 | unauthenticated user | 23.100.98.124:22128                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 175 | unauthenticated user | 23.100.98.124:22129                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 176 | unauthenticated user | 23.100.98.124:22130                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 177 | unauthenticated user | 23.100.98.124:22131                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 178 | unauthenticated user | 23.100.98.124:22132                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 179 | unauthenticated user | 23.100.98.124:22133                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 180 | unauthenticated user | 23.100.98.124:22134                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 181 | unauthenticated user | 23.100.98.124:22135                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 182 | unauthenticated user | 23.100.98.124:22136                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 183 | unauthenticated user | 23.100.98.124:22137                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 184 | unauthenticated user | 23.100.98.124:22138                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 185 | unauthenticated user | 23.100.98.124:22139                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 186 | unauthenticated user | 23.100.98.124:22140                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 187 | unauthenticated user | 23.100.98.124:22141                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 188 | unauthenticated user | 23.100.98.124:22142                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 189 | unauthenticated user | 23.100.98.124:30914                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 190 | unauthenticated user | 23.100.98.124:22143                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 191 | unauthenticated user | 23.100.98.124:30915                          | NULL               | Connect |    2 | Receiving from client  | NULL             |
| 192 | unauthenticated user | 23.100.98.124:30916                          | NULL               | Connect |    2 | login                  | NULL             |
| 193 | unauthenticated user | 23.100.98.124:30917                          | NULL               | Connect |    2 | login                  | NULL             |
| 194 | unauthenticated user | 23.100.98.124:30918                          | NULL               | Connect |    2 | login                  | NULL             |
| 195 | unauthenticated user | 23.100.98.124:30919                          | NULL               | Connect |    2 | login                  | NULL             |
| 196 | unauthenticated user | 23.100.98.124:30920                          | NULL               | Connect |    2 | login                  | NULL             |
| 197 | unauthenticated user | 23.100.98.124:30921                          | NULL               | Connect |    2 | login                  | NULL             |
| 198 | unauthenticated user | 23.100.98.124:30922                          | NULL               | Connect |    2 | login                  | NULL             |
| 199 | unauthenticated user | 23.100.98.124:30923                          | NULL               | Connect |    2 | login                  | NULL             |
| 200 | unauthenticated user | 23.100.98.124:30924                          | NULL               | Connect |    2 | login                  | NULL             |
| 201 | unauthenticated user | 23.100.98.124:30925                          | NULL               | Connect |    2 | login                  | NULL             |
| 202 | unauthenticated user | 23.100.98.124:30926                          | NULL               | Connect |    2 | login                  | NULL             |
| 203 | unauthenticated user | 23.100.98.124:30927                          | NULL               | Connect |    2 | login                  | NULL             |
| 204 | unauthenticated user | 23.100.98.124:30928                          | NULL               | Connect |    2 | login                  | NULL             |
| 205 | unauthenticated user | 23.100.98.124:30929                          | NULL               | Connect |    2 | login                  | NULL             |
| 206 | unauthenticated user | 23.100.98.124:30930                          | NULL               | Connect |    2 | login                  | NULL             |
| 207 | unauthenticated user | 23.100.98.124:30931                          | NULL               | Connect |    2 | login                  | NULL             |
| 208 | unauthenticated user | 23.100.98.124:30932                          | NULL               | Connect |    2 | login                  | NULL             |
| 209 | unauthenticated user | 23.100.98.124:30933                          | NULL               | Connect |    2 | login                  | NULL             |
| 210 | unauthenticated user | 23.100.98.124:30934                          | NULL               | Connect |    2 | login                  | NULL             |
| 211 | unauthenticated user | 23.100.98.124:30935                          | NULL               | Connect |    2 | login                  | NULL             |
| 212 | unauthenticated user | 23.100.98.124:30936                          | NULL               | Connect |    2 | login                  | NULL             |
| 213 | unauthenticated user | 23.100.98.124:30937                          | NULL               | Connect |    2 | login                  | NULL             |
| 214 | unauthenticated user | 23.100.98.124:30938                          | NULL               | Connect |    2 | login                  | NULL             |
| 215 | unauthenticated user | 23.100.98.124:30939                          | NULL               | Connect |    2 | login                  | NULL             |
| 216 | unauthenticated user | 23.100.98.124:30940                          | NULL               | Connect |    2 | login                  | NULL             |
| 217 | unauthenticated user | 23.100.98.124:30941                          | NULL               | Connect |    2 | login                  | NULL             |
| 218 | unauthenticated user | 23.100.98.124:30942                          | NULL               | Connect |    2 | login                  | NULL             |
| 219 | unauthenticated user | 23.100.98.124:30944                          | NULL               | Connect |    2 | login                  | NULL             |
| 220 | unauthenticated user | 23.100.98.124:30945                          | NULL               | Connect |    2 | login                  | NULL             |
| 221 | unauthenticated user | 23.100.98.124:30946                          | NULL               | Connect |    2 | login                  | NULL             |
| 222 | unauthenticated user | 23.100.98.124:30947                          | NULL               | Connect |    2 | login                  | NULL             |
| 223 | unauthenticated user | 23.100.98.124:30948                          | NULL               | Connect |    2 | login                  | NULL             |
| 224 | unauthenticated user | 23.100.98.124:30949                          | NULL               | Connect |    2 | login                  | NULL             |
| 225 | unauthenticated user | 23.100.98.124:30951                          | NULL               | Connect |    2 | login                  | NULL             |
| 226 | unauthenticated user | 23.100.98.124:30952                          | NULL               | Connect |    2 | login                  | NULL             |
| 227 | unauthenticated user | 23.100.98.124:30950                          | NULL               | Connect |    2 | login                  | NULL             |
| 228 | unauthenticated user | 23.100.98.124:30953                          | NULL               | Connect |    2 | login                  | NULL             |
| 229 | unauthenticated user | 23.100.98.124:30954                          | NULL               | Connect |    2 | login                  | NULL             |
| 230 | unauthenticated user | 23.100.98.124:30955                          | NULL               | Connect |    2 | login                  | NULL             |
| 231 | unauthenticated user | 23.100.98.124:30956                          | NULL               | Connect |    2 | login                  | NULL             |
| 232 | unauthenticated user | 23.100.98.124:30957                          | NULL               | Connect |    2 | login                  | NULL             |
| 233 | unauthenticated user | 23.100.98.124:30958                          | NULL               | Connect |    2 | login                  | NULL             |
+-----+----------------------+----------------------------------------------+--------------------+---------+------+------------------------+------------------+
102 rows in set (0.05 sec)
```

めっちゃ接続しに来ている・・・

まるでF5アタックを受けているかのようにすごい勢いでアクセスされています。
どうやらこれによってコネクションが張れなくなりエラーで落ちているようです。
連打しているわけではなく、IP制限などもかけて私しか触れない状態にしているのでアクセス過多というわけではないので本当に謎です。:thinking:

(2020/01/23追記おわり)

### AppServiceのVNet統合をはずしてみる(2020/01/24追記)

特定のスロットから大量にアクセスされているためどこかのネットワークがループしているのではないかと考え、VNet統合をやめてみた。

1. 運用スロットのVNet統合を切断する
2. デプロイスロットのVNet統合を切断する
3. Azure Database for MySQLのアクセス制限にAppServiceの送信IPアドレスを追加する

動いた！
ような気がしたけどスロットスワップしたら同じ状況になったので気のせいでした。

### ヘルスチェックのパスを変える

アクセスしているのは私しかいないため、あとのアクセスするやつといえばヘルスチェック。
FrontDoorとkuduのヘルスチェック先をDBアクセスが発生しない軽量ページに変更してみる。

1. Azure FrontDoorのバックエンドプールのヘルスチェックパスを軽量ページに変更する
2. [AppServiceのヘルスチェックパスを軽量ページに変更する](https://github.com/projectkudu/kudu/wiki/Health-Check-(Preview))

動いた！
スロットスワップしても動いてる！

## 結論

ヘルスチェックでDBアクセスが発生するページを指定するのは微妙？
スロットスワップを行うと大量のアクセスが発生するようで原因はMicrosoftに問い合わせ中