69306


Laravel で書かれたAPIサーバーの一部処理をジョブのように定期実行したいです

ソースをなるべく変更せずにかつジョブリソース管理しやすいように  
AWS Lambda 上で Laravel のクエリビルダを動かせるか試しているのですが

[PHPで書かれたスクリプトをAWS
Lambda上で定期実行する](https://qiita.com/yunano/items/25e41232a0cbd242f648)

こちらの記事を参考にした bootstrap を使って

[code]

    .
    ├── bootstrap
    ├── lambda_handler.php
    ├── php.ini
    ├── composer.json
    ├── composer.lock
    └── vendor/
    
[/code]

という構成で Lambda をデプロイしたところ PHP 自体は動作できました

* * *

[素のPHPでEloquentを使う(illuminate/databaseパッケージの単体利用)](https://akamist.com/blog/archives/1041)  
続いてこちらの記事を参考にして

[code]

    {
        "require": {
            "illuminate/database": "*"
        }
    }
    
[/code]

という composer.json で compose install して vendor ディレクトリを作って

lambda_handler.php

[code]

    <?php
    require_once __DIR__ . '/vendor/autoload.php';
    $db = new Illuminate\Database\Capsule\Manager;
    echo get_class($db) . PHP_EOL;
    ?>
    
[/code]

というテストコードとともにデプロイして実行したところ

[code]

    Fatal error: Uncaught Error: Class 'PDO' not found in /var/task/vendor/illuminate/database/Capsule/Manager.php:49
    
[/code]

というエラーが出ます

エラー内容をぐぐると複数の記事でどれも

[code]

    yum install php-pdo
    
[/code]

をしろとあるんですが Lambda 上なので当然何かをインストールしたりできず、  
デプロイパッケージに含める必要があるのですがどうすればいいのでしょうか

[PHP Slim 環境構築(5)
PDOとDBアクセス](https://qiita.com/dynamitecoolguy/items/325f66ce0370714c6335)  
こちらに yum install なしでPHP上の設定だけで POD を使おうとしている記事があったので

composer.json に以下のように ext-pdo をというのを追加して  
composer install から Lambda デプロイみたのですが特にエラーは変わりませんでした

[code]

    {
        "require": {
            "illuminate/database": "*",
            "ext-pdo": "*"
        }
    }
    
[/code]

PHP のローカル環境で Laravel のクエリビルダを動かせる最低限のソースを  
パッケージ化するにはどうすればいいか  
お知恵をお貸しいただけるとありがたいです


CC BY-SA 4.0
2020-08-05T10:26:27.377
69275
2020-08-06T09:24:17.497
2020-08-05T10:37:56.507
question
php laravel aws-lambda composer
AWS Lambda 上で Laravel のクエリビルダを使いたい


php.ini に

[code]

    extension_dir=/opt/lib/php/7.3/modules
    extension=json.so
    extension=mbstring.so
    extension=mysqlnd.so
    extension=mysqli.so
    extension=pdo.so
    extension=pdo_mysql.so
    
[/code]

と記述することで動作しました


CC BY-SA 4.0
2020-08-06T09:24:17.497
69306
2020-08-06T09:24:17.497
69275
answer