This is a sample repository of Serverless LAMP stack.
MIT License
[ English | Japanese ]
サーバーレス LAMP スタックのサンプルリポジトリです。
サーバーレス LAMP スタックについて詳しく知りたいという方は下記の AWS ブログの記事を参照ください。
新しいサーバーレス LAMP スタック – Part 1: 概要紹介 | Amazon Web Services ブログ
Laravel Sail を使って環境構築を行います。Sail は、ローカルマシンで Laravel アプリケーションを開発するための Docker 環境を簡単に作ることができます。
$ curl -s "https://laravel.build/serverless-laravel" | bash
# If you have a component you want, add queries like this:
# curl -s "https://laravel.build/serverless-laravel?with=mysql,redis" | bash
$ ./vendor/bin/sail up -d
サーバーレス Laravel を構築する上で Bref ライブラリをインストールします。
Bref というのは、Laravel アプリケーションを AWS Lambda 上で実行する環境を簡単に作流ことができる優れものです。
Serverless Laravel applications - Bref
# Add libraries
$ ./vendor/bin/sail composer require bref/bref bref/laravel-bridge
# Copy yaml of serverless.
$ ./vendor/bin/sail artisan vendor:publish --tag=serverless-config
よく使うであろうコマンドの実行方法を記載しました。
# migrate
$ ./vendor/bin/sail artisan migrate
# seed
$ ./vendor/bin/sail artisan db:seed
# install npm packages
$ ./vendor/bin/sail npm i
環境変数用の yml ファイルを serverless framework のスタック名でコピーします。
$ cp ./serverless-config/env/stack.yml.example ./serverless-config/env/<your stack>.yml
Docker コンテナをカスタマイズしたくなったら、下記のように publish して Dockerfile を編集します。
$ ./vendor/bin/sail artisan sail:publish
Copied Directory [/vendor/laravel/sail/runtimes] To [/docker]
Publishing complete.
ローカル DB を直接 SQL を実行したい場合は、コンテナに入って確認することができます。(もちろん tinker を使う方法もあります。)
# Set variables
$ MYSQL_USER=<user_name>
$ MYSQL_PASSWORD=<password>
$ MYSQL_DATABASE=<database_name>
$ docker-compose exec mysql bash -c 'mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE}'
Tips
何度も使うコマンドは、エイリアスを設定しておくと良いでしょう。
# sail
alias sail="./vendor/bin/sail"
# bref
alias bref="./vendor/bin/bref"
Serverless Framework CLI を使ってデプロイします。
マイグレーションやシードを行いたい場合は、Bref CLI を使って行ます。
$ seleverless deploy -v
# or
$ sls deploy -v
# migrate
$ ./vendor/bin/bref cli <artisan function> --region <region> -- migrate
# seed
$ ./vendor/bin/bref cli <artisan function> --region <region> -- db:seed
AWS CLI を使って、S3 バケットにデプロイします。
$ ./vendor/bin/sail npm run prod
$ aws s3 sync public/ s3://<bucket-name>/ --delete --exclude index.php