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

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

すんません、完全に二番煎じなやつ書きます。アレンジはできたらするけどとりあえずやってみる。

ちょっとした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をサーバーレスでやる意味はあんまりわからんのですけどね。。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)