ハマログ

株式会社イーツー・インフォの社員ブログ

brefで実現するサーバレスLaravelアプリケーションの構築

高負荷のLaravel案件をやっています。

サーバーはAWSで、当初コンテナのオートスケールを想定していましたが、現在ではサーバーレスが実用的になったということで、サーバーレスの技術調査をしています。

環境

・AWS
・PHP7.4
・Laravel7

やってみる

Laravelのインストール
# composer create-project --prefer-dist laravel/laravel src
Creating a "laravel/laravel" project at "./src"
Installing laravel/laravel (v7.12.0)
  - Installing laravel/laravel (v7.12.0): Downloading (100%)
Created project in C:\xampp\htdocs\laravel-bref\src
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
(略)
brefのインストール
# cd src
# composer require bref/bref bref/laravel-bridge
Using version ^0.5.29 for bref/bref
Using version ^0.2.0 for bref/laravel-bridge
./composer.json has been updated
(略)
serverless.ymlの作成
# php artisan vendor:publish --tag=serverless-config
Copied File [\vendor\bref\laravel-bridge\config\serverless.yml] To [\serverless.yml]
Publishing complete.
config/logging.php
        'stack' => [
            'driver' => 'stack',
            'channels' => ['stderr'], // single -> stderr
            'ignore_exceptions' => false,
        ],
.env
SESSION_DRIVER=array
上記以外はbref/laravel-bridgeがProviderで解決してくれている

Serverless frameworkの導入

デプロイには Serverless frameworkを利用します
The Serverless Application Framework | Serverless.com
インストール
# npm install -g serverless

> protobufjs@6.10.1 postinstall C:\Users\kanek\AppData\Roaming\npm\node_modules\serverless\node_modules\protobufjs
> node scripts/postinstall

> serverless@1.76.1 postinstall C:\Users\kanek\AppData\Roaming\npm\node_modules\serverless
> node ./scripts/postinstall.js
   ┌───────────────────────────────────────────────────┐
   │                                                   │
   │   Serverless Framework successfully installed!    │
   │                                                   │
   │   To start your first project run 'serverless'.   │
   │                                                   │
   └───────────────────────────────────────────────────┘

+ serverless@1.76.1
added 752 packages from 501 contributors in 50.901s
aws アクセスキーの設定
serverless config credentials --provider aws --key  --secret 

AWSアクセスキーの作成

手順にしたがってIAMユーザーを作ります。AdministratorAccessを割り当てろって書いてあってちょっと雑な気もするけどまあいいか。

デプロイ

コンフィグキャッシュのクリア
php artisan config:clear
デプロイコマンドの実行
serverless deploy
結果
c:\xampp\htdocs\laravel-bref\src>serverless deploy
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
........
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service laravel.zip file to S3 (15.98 MB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
..........................................
Serverless: Stack update finished...
Service Information
service: laravel
stage: dev
region: ap-northeast-1
stack: laravel-dev
resources: 15
api keys:
  None
endpoints:
  ANY - https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev
  ANY - https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/{proxy+}
functions:
  web: laravel-dev-web
  artisan: laravel-dev-artisan
layers:
  None
嘘みたいに簡単です

成果物の確認

入り口はAPI Gatewayです。Proxy経由でLambdaにアクセスが渡されていることが確認できます。
Lambdaです。webとartisanの2種類が作成されています
コードは確認できませんでした。デバッグ大変そう
CloudWatch Logs
DBの利用にはRDS Proxyが必要です。

まとめ

システムテスト、負荷テストはこれからですが、セットアップ/デプロイは容易に実現できました。
デプロイはこれからCodeXXX系で構築するので、こちらも後ほどまとめようと思います。

いよいよサーバレスを選択しない理由がなくなりそうです。
API GatewayAuroraAWSdeploylambdaLaravelPHPPHP7RDSServerlessVPCサーバーレスデプロイパフォーマンスララベル

  kaneko tomo   2020年7月25日


関連記事

Dockerについてあれこれ

最近Dockerでローカル環境を構築したりしてるので、ここまでに調べた事・気づい…

PhpSpreadsheetとTcpdfでExcelファイルから日本語PDFを作成してみる(そして失敗する)

はじめに PDFの帳票をLaravelから作成したかったので、いろいろ試していま…

AWS Systems Managerを利用して複数のEC2インスタンスで一括コマンド実行する

AWS Systems Managerの管理下にEC2を置くと、複数のインスタン…


← 前の投稿

次の投稿 →