”AWS Lambda で Laravel を動かしてみた”をやってみた
”AWS Lambda で Laravel を動かしてみた”をやってみた:
すんません、完全に二番煎じなやつ書きます。アレンジはできたらするけどとりあえずやってみる。
ちょっとしたLTをやるかもしんなくて、そのネタをだいたいこういうので考えてるのですよ。
AWS Lambda で Laravel を動かしてみた
そんなわけで見本の通りにとりあえずやってみる。なるほど、LambdaのLayer使うのね。一回やってみたかった。
しかし、難しいな。あんまりよくわからん。手を動かして覚えよう。
実はプライベートではec2使ってなくて、なんか作業する時はgcpの無料枠でやってたんだけど、これはec2のamazon linuxでやった方が間違いなさそうなのでt3.nano作ってやってみます。
落ちてもいいし、スポットインスタンスとやらを使ってみようかな。試しに。
通常のオンデマンドインスタンスは0.0068USD/Hらしいが、0.0041で入札してみた。月400円いかないくらいか。
で、無事作成できてsshもできたので進めていこう。
Lambda関数が動作するdocker環境とでも思えばいいんだろうか。
で、見本サイトのSAM テンプレートを作成するもやっておきます
なお、ホストにも必要なアプリケーションを入れておく
そしてキャッシュを/tmpに逃がすのもやっておく。
bootstrap/app.phpとconfig/cache.phpとconfig/view.phpの編集すね。あとconfig/session.phpも。
で、sam cliを入れる。ちなみにgccとかcppも入れました。
これもそのまま。
で、deployできたんだけど
わからんけどcomposer installとかしとけばいいんかな。vendorディレクトリないし。
laravel directoryで
打ったらphpunitがどうたらって言われて、そんなんいらんからcomposer.jsonから消してもっかいcomposer install。
で、そしたら次はこんなエラー出た。
bootstrap/cacheに書き込めん、って言ってるのはわかるんだが・・はて。これを/tmpに持ってくにはどうしたらええんやろ。
と思ったけどartisan実行するといいだけだった。
お、こうなればあと少しなきがする。
どうやら、viewをみるときはbootstrap/cache/config.phpを見てるっぽいが、これはdeploy環境でartisanを実行するとdeploy環境のpathになるらしい。
正攻法じゃないだろうけど、lambdaの環境とpath合わせてしまおうか。。
これでどうだ!
いけたわー。
しかし、結局やってみただけだ。
vue.jsとか使ってみたかったんだけどもう眠いです。
今日はここまでー。
というか正直な所、laravelをサーバーレスでやる意味はあんまりわからんのですけどね。。
すんません、完全に二番煎じなやつ書きます。アレンジはできたらするけどとりあえずやってみる。
ちょっとしたLTをやるかもしんなくて、そのネタをだいたいこういうので考えてるのですよ。
AWS Lambda で Laravel を動かしてみた
Lambda Layer を作る
そんなわけで見本の通りにとりあえずやってみる。なるほど、LambdaのLayer使うのね。一回やってみたかった。しかし、難しいな。あんまりよくわからん。手を動かして覚えよう。
実はプライベートではec2使ってなくて、なんか作業する時はgcpの無料枠でやってたんだけど、これはec2のamazon linuxでやった方が間違いなさそうなのでt3.nano作ってやってみます。
落ちてもいいし、スポットインスタンスとやらを使ってみようかな。試しに。
通常のオンデマンドインスタンスは0.0068USD/Hらしいが、0.0041で入札してみた。月400円いかないくらいか。
で、無事作成できてsshもできたので進めていこう。
- yumでgit入れる
- git clone https://github.com/stackery/php-lambda-layer
- dockerいるって。 sudo amazon-linux-extras install docker
- sudo service docker start
- build.sh 差し替え (見本の通りに)
- bootstrap 編集(見本の通りに)
- sudo make (php-lambda-layer内で)
- upload.shを編集。(md5をmd5sumに書き換えたりしたのとbucket作ったりregions.sh編集してap-northeast-1だけにしたり、bucket_name変えたり)
- make upload
- publish.shも編集 (bucket_name変えたり)
- pip install (https://pip.pypa.io/en/stable/installing/#installing-with-get-pip-py)
- sudo pip install -U awscli
- make publish
Lambda関数が動作するdocker環境とでも思えばいいんだろうか。
で、見本サイトの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.*"
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
laravel directoryで
php ../composer.phar install
って打つ。打ったらphpunitがどうたらって言われて、そんなんいらんからcomposer.jsonから消してもっかいcomposer install。
で、そしたら次はこんなエラー出た。
bootstrap/cacheに書き込めん、って言ってるのはわかるんだが・・はて。これを/tmpに持ってくにはどうしたらええんやろ。
と思ったけどartisan実行するといいだけだった。
$ sudo php artisan key:generate $ sudo php artisan config:cache
お、こうなればあと少しなきがする。
どうやら、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
いけたわー。
しかし、結局やってみただけだ。
vue.jsとか使ってみたかったんだけどもう眠いです。
今日はここまでー。
というか正直な所、laravelをサーバーレスでやる意味はあんまりわからんのですけどね。。
コメント
コメントを投稿