LoginSignup
3
8

More than 5 years have passed since last update.

”AWS Lambda で Laravel を動かしてみた”をやってみた

Last updated at Posted at 2018-12-28

すんません、完全に二番煎じなやつ書きます。アレンジはできたらするけどとりあえずやってみる。
ちょっとしたLTをやるかもしんなくて、そのネタをだいたいこういうので考えてるのですよ。

AWS Lambda で Laravel を動かしてみた

Lambda Layer を作る

そんなわけで見本の通りにとりあえずやってみる。なるほど、LambdaのLayer使うのね。一回やってみたかった。
しかし、難しいな。あんまりよくわからん。手を動かして覚えよう。

実はプライベートではec2使ってなくて、なんか作業する時はgcpの無料枠でやってたんだけど、これはec2のamazon linuxでやった方が間違いなさそうなのでt3.nano作ってやってみます。
落ちてもいいし、スポットインスタンスとやらを使ってみようかな。試しに。
通常のオンデマンドインスタンスは0.0068USD/Hらしいが、0.0041で入札してみた。月400円いかないくらいか。

で、無事作成できてsshもできたので進めていこう。

  1. yumでgit入れる
  2. git clone https://github.com/stackery/php-lambda-layer
  3. dockerいるって。 sudo amazon-linux-extras install docker
  4. sudo service docker start
  5. build.sh 差し替え (見本の通りに)
  6. bootstrap 編集(見本の通りに)
  7. sudo make (php-lambda-layer内で)
  8. upload.shを編集。(md5をmd5sumに書き換えたりしたのとbucket作ったりregions.sh編集してap-northeast-1だけにしたり、bucket_name変えたり)
  9. make upload
  10. publish.shも編集 (bucket_name変えたり)
  11. pip install (https://pip.pypa.io/en/stable/installing/#installing-with-get-pip-py)
  12. sudo pip install -U awscli
  13. make publish

したらなんかLayerはできた。
Lambda関数が動作するdocker環境とでも思えばいいんだろうか。

29.png

で、見本サイトのSAM テンプレートを作成するもやっておきます

Lambda 関数を作る

なお、ホストにも必要なアプリケーションを入れておく

$ sudo amazon-linux-extras install php7.2  
$ sudo yum install -y php-cli php-mbstring php-mysqlnd php-opcache php-pdo php-pgsql zip
$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar create-project --prefer-dist laravel/laravel laravel "5.7.*"

そしてキャッシュを/tmpに逃がすのもやっておく。
bootstrap/app.phpとconfig/cache.phpとconfig/view.phpの編集すね。あとconfig/session.phpも。

で、sam cliを入れる。ちなみにgccとかcppも入れました。

$ sudo pip install --user --upgrade aws-sam-cli

これもそのまま。

sam package \
    --template-file template.yml \
    --output-template-file serverless-laravel.yml \
    --s3-bucket <デプロイ用バケット名>

sam deploy \
    --template-file serverless-laravel.yml \
    --stack-name serverless-laravel \
    --capabilities CAPABILITY_IAM

エラー

で、deployできたんだけど{"message": "Internal server error"}って出てしまったのでcloudwatchlogsみてみると以下のエラーが。

[Sat Dec 29 00:53:40 2018] PHP Fatal error: require(): Failed opening required '/var/task/public/../vendor/autoload.php' (include_path='.:/usr/share/pear7:/usr/share/php7') in /var/task/public/index.php on line 24

わからんけどcomposer installとかしとけばいいんかな。vendorディレクトリないし。
laravel directoryでphp ../composer.phar installって打つ。
打ったらphpunitがどうたらって言われて、そんなんいらんからcomposer.jsonから消してもっかいcomposer install。

で、そしたら次はこんなエラー出た。

30.png

bootstrap/cacheに書き込めん、って言ってるのはわかるんだが・・はて。これを/tmpに持ってくにはどうしたらええんやろ。

と思ったけどartisan実行するといいだけだった。

$ sudo php artisan key:generate
$ sudo php artisan config:cache

31.png

お、こうなればあと少しなきがする。
どうやら、viewをみるときはbootstrap/cache/config.phpを見てるっぽいが、これはdeploy環境でartisanを実行するとdeploy環境のpathになるらしい。
正攻法じゃないだろうけど、lambdaの環境とpath合わせてしまおうか。。

$ mv laravel /var/task
$ ln -s /var/task ./laravel
$ cd !$
$ sudo php artisan config:clear
$ sudo php artisan config:cache

これでどうだ!

32.png

いけたわー。
しかし、結局やってみただけだ。
vue.jsとか使ってみたかったんだけどもう眠いです。
今日はここまでー。

というか正直な所、laravelをサーバーレスでやる意味はあんまりわからんのですけどね。。

3
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
8