Documents
Lambda でLaravelを動かしてみるときの環境構築
サーバーレス環境でLaravelを動かしてみるチュートリアル的なものになります。Lambdaについてはもう皆さんいろいろ知っているかと思うので概ね割愛します。概ねアホみたいに大きなリクエストとレスポンスではない限りLambdaは最高のパフォーマンスを発揮します。LaravelとLambdaの相性もかなり進化してよりよくなっているようです。
Laravel自体がsailというDockerコマンド的なものを持つようになったのと、それらが直接デプロイイメージとなるようで、ここらはかなり楽になったかなという感じです。基本的にはLaravelのプロジェクトとbreafでいけちゃう感じがします。
AWSにも公式ページっぽいものがあります。
サーバーレス LAMP スタック – Part4: サーバーレスLaravelアプリの構築
Laravelでの環境構築の手順
-
Laravelのインストール
$ curl -s https://laravel.build/larademo | bash
Laravelのイメージをまるごと落としてきます。結構時間かかります。
larademo
の部分はプロジェクトに合わせて好きな文字列でOKです。ディレクトリ名になります。
途中でパスワードを求められますので、PCのadminのパスワードを入力します。 -
Composerのインストール
普通にcomposerの設定をしておけば問題なしです。
https://getcomposer.org/download/$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" $ php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" $ php composer-setup.php $ php -r "unlink('composer-setup.php');"
私は個人的にcompsoerはlocalでそれぞれ持たせるようにしています。composerのバージョンによって動いたり動かなかったりする案件があるので。(Globalで設定してある人は、そのまま使えるのでインストール不要)
composerでupdateしておきます。$ php composer.phar update
dockerで起動します。
$ docker-compose up -d
エラーが出ときは、いろいろ原因があるので、ひとつひとつ潰してゆく感じになると思います。すでに既存のLaravelのDockerが起動しているとhttpのポートが重なるので、別のものにしておく必要があります。
docker-compose.yml
を開いて編集しておきます。Macの場合は利用中のポートを確認しておくとよいと思います。$ sudo lsof -i -P | grep "LISTEN"
portの変更をします。いろいろ被っている場合は、全部別のものにするか、起動中のポートを停止してください。
// docker-compose.yml ... ports: - '${APP_PORT:-6640}:80' - '${HMR_PORT:-6641}:8080' ...
起動します。
$ docker-compose up -d $ docker-compose ps lambda_laravel_laravel.test_1 start-container Up 0.0.0.0:6640->80/tcp, 8000/tcp, 0.0.0.0:6641->8080/tcp lambda_laravel_mailhog_1 MailHog Up 0.0.0.0:1026->1025/tcp, 0.0.0.0:8026->8025/tcp lambda_laravel_meilisearch_1 tini -- /bin/sh -c ./meili ... Up (unhealthy) 0.0.0.0:7701->7700/tcp lambda_laravel_mysql_1 /entrypoint.sh mysqld Up (health: starting) 0.0.0.0:330->3306/tcp, 33060/tcp, 33061/tcp lambda_laravel_redis_1 docker-entrypoint.sh redis ... Up (healthy) 0.0.0.0:6380->6379/tcp lambda_laravel_selenium_1 /opt/bin/entry_point.sh Up 4444/tcp, 5900/tcp
これで起動できました。http://localhost:6640/ にアクセスしてLaravelの初期画面が出てきたらOKです。
Serverless用にLaravelの準備をする
Serverless用のライブラリbref
をインストールします。これは「Bref is a framework to write and deploy serverless PHP applications on AWS Lambda.」ってことなので、こういうものだと思います。
$ ./vendor/bin/sail composer require bref/bref bref/laravel-bridge
ServerlessようにDockerファイルを修正するので、Dockerファイルをpublishします。
./vendor/bin/sail php artisan vendor:publish --tag=serverless-config
serverless-config.yml
というファイルが作成されます。これを後から編集してLambdaにデプロイできるようにします。
AWSのアクセスキーの作成
AWSアクセスキーの作成を参考にして作成してください。IAMで新規ユーザーを作成してAdmin権限を与えてキーを発行するという手続きになります。どこかしらで見かけたのですが、開発発展中の機能なので適切な権限付与ができないのでフルパーミッションでごめんね。扱いには十分気をつけてね、というようなことがAWSのどこかのページに書いてました。
例では、
- AWSダッシュボードで、IAMに移動し、新しいユーザーを作成します。
- ユーザー名(「bref-cli」など)を設定し、プログラムによるアクセスを有効にして、次の画面に移動します。
- [既存のポリシーを直接添付する]をクリックし、 AdministratorAccessを検索して選択します。
- ユーザーの作成を完了し、生成されたAWSアクセスキーをメモします。
こういったものが入手できれば完了です。
user name: bref-cli
access key ID: AK******************
secret access key: dq**************************************
Serverless コマンドのインストール
$ npm install -g serverless
npmですぐにインストールできるわけですが、開発環境が込み入っている場合はnode.jsのバージョンとかもいろいろあるので、私個人はanyenvでローカルに個別にインストールするようにしています。anyenv + nodenv で指定バージョンのnode.jsを使うあたりを参考にしてください。ローカルに個別でインストールする場合は-g
なしでインストールします。
$ npm install serverless
インストールが終わったら、バージョンを確認してみます。
% serverless -v
Running "serverless" from node_modules
Framework Core: 3.19.0 (local) 3.19.0 (global)
Plugin: 6.2.2
SDK: 4.3.2
こんな感じで起動できればOKです。
serverless
のインストールは様々な方法でできます。npmに含まれているので、npmでインストールするのがもっとも最速だと思いますが、Setting Up Serverless Framework With AWSといったページもありcurlなどでインストールも可能です。