以下の内容はhttps://kakakakakku.hatenablog.com/entry/2026/03/17/090726より取得しました。


MAINTENANCE_MODE: Bref で Laravel アプリケーションのメンテナンスモードを切り替える

Laravel では php artisan down コマンドと php artisan up コマンドを使ってアプリケーションの「メンテナンスモード」を切り替えることができる.仕組みとしては storage/framework/down というファイルがあったらメンテナンス画面を返すようになっていて,php artisan down コマンドと php artisan up コマンドは storage/framework/down ファイルを操作する.

laravel.com

しかし Bref を使って Laravel アプリケーションを AWS Lambda 関数で動かす場合に /var/task ディレクトリが読み取り専用になっているため storage/framework/down ファイルを操作できないという制約がある.よって,Bref には専用の仕組みがある.

bref.sh

具体的には Bref では Bref Laravel Bridge というライブラリを使って MAINTENANCE_MODE という環境変数があったら /tmp/storage/framework/down ファイルを操作してメンテナンスモードを切り替えるように拡張されている.コード的には src/MaintenanceMode.php あたりが参考になる😀

github.com

実際に試してみた \( 'ω')/

Laravel 標準のメンテナンスモードを試す

まずは Laravel 標準のメンテナンスモードを試す.新しく Laravel プロジェクトをセットアップして php artisan down コマンドを実行するとメンテナンス画面に切り替わった👌

$ php artisan down

   INFO  Application is now in maintenance mode.

storage/framework/down ファイルもできていた.

$ cat storage/framework/down
{
    "except": [
        "\/up"
    ],
    "redirect": null,
    "retry": null,
    "refresh": null,
    "secret": null,
    "status": 503,
    "template": null
}

メンテナンスモードを戻すときは php artisan up コマンドを実行する.

$ php artisan up

   INFO  Application is now live.

$ cat storage/framework/down
cat: storage/framework/down: No such file or directory

Bref をセットアップする

Bref の Getting started を参考に Laravel プロジェクトを修正する.

$ composer require bref/bref bref/laravel-bridge --update-with-dependencies
$ php artisan vendor:publish --tag=serverless-config

bref.sh

自動生成されたserverless.yml は必要最低限な設定まで減らして,最終的に以下のようになった.ポイントは MAINTENANCE_MODE: ${param:maintenance, null} で,デプロイ時に --param="maintenance=1" を付けるとメンテナンスモードを切り替えることができるところ.

service: sandbox-bref-maintenance-mode

provider:
    name: aws
    region: ap-northeast-1
    environment:
        APP_ENV: ${sls:stage}
        APP_KEY: 'base64:+b5SgEAbvM6+u0kDdmiLRvowHwdg/7PixBYCCI5vEVg='
        APP_DEBUG: 0
        SESSION_DRIVER: cookie
        MAINTENANCE_MODE: ${param:maintenance, null}
        LOG_CHANNEL: stderr
        LOG_STDERR_FORMATTER: Bref\Monolog\CloudWatchFormatter

functions:
    web:
        handler: public/index.php
        runtime: php-84-fpm
        timeout: 28
        events:
            - httpApi: '*'

package:
    patterns:
        - '!.env'
        - '!node_modules/**'
        - '!public/storage'
        - '!resources/assets/**'
        - '!resources/css/**'
        - '!resources/images/**'
        - '!resources/js/**'
        - '!storage/**'
        - '!tests/**'
        - '!database/*.sqlite'

plugins:
    - ./vendor/bref/bref

Bref を使って AWS Lambda 関数にデプロイする(メンテナンスモード OFF)

まずはメンテナンスモード OFF でデプロイする.

$ serverless deploy

Deploying sandbox-bref-maintenance-mode to stage dev (ap-northeast-1)

✔ Service deployed to stack sandbox-bref-maintenance-mode-dev (33s)

endpoint: ANY - https://pfyn3zqflf.execute-api.ap-northeast-1.amazonaws.com
functions:
  web: sandbox-bref-maintenance-mode-dev-web (38 MB)

Want a better experience than the AWS console? Try out https://bref.sh/cloud

Amazon API Gateway のエンドポイントにアクセスすると Laravel の初期画面が表示された👌

Bref を使って AWS Lambda 関数にデプロイする(メンテナンスモード ON)

次にメンテナンスモード ON でデプロイする.

$ serverless deploy --param="maintenance=1"

Deploying sandbox-bref-maintenance-mode to stage dev (ap-northeast-1)

✔ Service deployed to stack sandbox-bref-maintenance-mode-dev (38s)

endpoint: ANY - https://pfyn3zqflf.execute-api.ap-northeast-1.amazonaws.com
functions:
  web: sandbox-bref-maintenance-mode-dev-web (38 MB)

Want a better experience than the AWS console? Try out https://bref.sh/cloud

すると Bref を使って AWS Lambda 関数にデプロイした Laravel アプリケーションでも同じメンテナンス画面に切り替わった👌

カスタム画面をデプロイする

Laravel では resources/views/errors/503.blade.php ファイルを使ってデフォルトのメンテナンス画面をカスタマイズできる.

laravel.com

今回は簡単に We are currently down for maintenance. Please check back soon. という1文を追加したメンテナンス画面を追加して,もう一度メンテナンスモード ON でデプロイする.

$ serverless deploy --param="maintenance=1"

Deploying sandbox-bref-maintenance-mode to stage dev (ap-northeast-1)

✔ Service deployed to stack sandbox-bref-maintenance-mode-dev (27s)

endpoint: ANY - https://pfyn3zqflf.execute-api.ap-northeast-1.amazonaws.com
functions:
  web: sandbox-bref-maintenance-mode-dev-web (38 MB)

Want a better experience than the AWS console? Try out https://bref.sh/cloud

するとカスタム画面に切り替わった👌

最終的にメンテナンスモードを解除する場合は --param="maintenance=1" を付けずにデプロイすれば OK👌

$ serverless deploy

まとめ

BrefBref Laravel Bridge で Laravel アプリケーションのメンテナンスモードを切り替える仕組みを試してみた.Bref Laravel Bridge には他にも Laravel アプリケーションを AWS Lambda 関数で動かすための仕組みが実装されているから調べてみようと思う❗️

関連記事

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com




以上の内容はhttps://kakakakakku.hatenablog.com/entry/2026/03/17/090726より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14