LoginSignup
1
0

More than 3 years have passed since last update.

S3イベントからLambda上のLaravelを起動する

Posted at

既存の処理をLambda上のLaravelにまとめるためにいろいろやってきましたが

今回はS3イベントからLambda上のLaravelを起動します。

前提

Laravel 並びに brefphp を導入済であること。brefphp の導入については brefphpを使って簡単にLaravelをサーバレス環境で動かす - Qiita がお勧めです。
Laravel についてはこちらのドキュメントを参照してください。

serverless.yml

バケットは「対象のバケット名」で作成済みで、s3://対象のバケット名/text/*.txt が新規作成された時に起動する設定です。

service: test-app

provider:
    name: aws
    region: ap-northeast-1
    runtime: provided
    iamRoleStatements:
      - Effect: Allow
        Action:
          - s3:*
        Resource: "arn:aws:s3:::対象のバケット名/*"


plugins:
    - ./vendor/bref/bref

functions:
    s3Created:
      handler: s3Event.php
      layers:
        - ${bref:layer.php-73}
      events:
        - s3:
            bucket: "対象のバケット名"
            events:
                - "s3:ObjectCreated:*"
            rules:
                - prefix: text/
                - suffix: .txt
            existing: true # 既存のバケットを利用する場合のみ記述

s3Event.php


<?php
/**
 * S3との連携動作
 */
declare(strict_types=1);
require __DIR__.'/vendor/autoload.php';

return function (array $event) {

    $app = require __DIR__ . '/bootstrap/app.php';

    $kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
    $kernel->bootstrap();

    $controller = new App\Http\Controllers\S3Controller;
    foreach($event['Records'] as $record) {
        return $controller->s3created($record);
    }
    return true;
};

app/Http/Controllers/S3Controller.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Aws\Exception\AwsException;

class S3Controller extends Controller
{
    /**
     * 作成されたTextファイルを取得
     */
    public function s3created($body)
    {
        // $body['s3']['object']['key'] が新規に作成されたTextファイルのkey。
        // 例) text/hogehoge.txt
        // ファイルへのアクセスについては config/filesystems.php で設定し 
        //     Storage::disk('s3')->get($body['s3']['object']['key']) 
        // のように取得するのが良いと思います
    }
}
1
0
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
1
0