Giter VIP home page Giter VIP logo

laravel-bridge's Introduction

Bref Laravel Bridge

Run Laravel on AWS Lambda with Bref.

Read the Bref documentation for Laravel to get started.

Background

This package was originally created by CacheWerk (the creators of Relay), maintained by Till Krüss and George Boot. It was published at cachewerk/bref-laravel-bridge.

For Bref 2.0, the contributors joined the Bref organization and CacheWerk's bridge was merged into this repository to create v2.0 of the bridge.

Documentation

The documentation is available at bref.sh/docs/frameworks/laravel.html.

laravel-bridge's People

Contributors

alustau avatar daanpeer avatar danpeggparallax avatar dasundev avatar daynnnnn avatar deleugpn avatar fabiofdsantos avatar georgeboot avatar hmazter avatar kentaroutakeda avatar laravel-shift avatar marcusrettig avatar mnapoli avatar olkitu avatar rafaellaurindo avatar sunaoka avatar szepeviktor avatar t-richard avatar tillkruss avatar vmiguellima avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

laravel-bridge's Issues

Unable to process SQS events

Using Laravel 7 and the php 7.4 layer.

I have setup a worker.php and made the changes to the serverless.yml file. I am able to write to the SQS queue, but when the lambda tries to process the event, I am seeing this error message:

This handler expected to be invoked with a API Gateway or ALB event. Instead, the handler was invoked with invalid event data.

"stack": [
"#0 /var/task/vendor/bref/bref/src/Event/Http/HttpHandler.php(20): Bref\Event\Http\HttpRequestEvent->__construct()",
"#1 /var/task/vendor/bref/bref/src/Runtime/LambdaRuntime.php(107): Bref\Event\Http\HttpHandler->handle()",
"#2 /opt/bootstrap(35): Bref\Runtime\LambdaRuntime->processNextEvent()",
"#3 {main}"
]

It seems to me that the API handler is trying to process the event, not the SQS handler.

Using `failed_jobs` table instaed of dead-letter queue

This package currently uses a dead-letter queue for failed jobs. This might be more in line with industry standards, but it's a bit different from "the Laravel way".

How hard would it be to use Larvels failed_jobs table instead, so I can easily call artisan job:retry 5?

Also, it seems that the attempts count ($job->tries) doesn't work (#14). This also messes a bit with the default Laravel setup.

Any thoughts?

SQLSTATE[HY000] [2002] Connection refused

Hello everybody.
I'm trying to deploy a laravel application with aws lambda. But I get this error SQLSTATE[HY000] [2002] Connection refused
can someone guide me please

No Access To Lambda Context

serverless.yml

...
  worker:
    handler: worker.php
    timeout: 900
    layers:
      - ${bref:layer.php-81}
    events:
      - sqs:
          arn: !GetAtt GPT3Queue.Arn
          batchSize: 3
...

Worker.php

<?php declare(strict_types=1);

use Bref\LaravelBridge\Queue\LaravelSqsHandler;
use Illuminate\Foundation\Application;

require __DIR__ . '/vendor/autoload.php';
/** @var Application $app */
$app = require __DIR__ . '/bootstrap/app.php';

/**
 * For Lumen, use:
 * $app->make(Laravel\Lumen\Console\Kernel::class);
 * $app->boot();
 */
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
$kernel->bootstrap();

return $app->makeWith(LaravelSqsHandler::class, [
    'connection' => 'sqs', // this is the Laravel Queue connection
    'queue' => getenv('SQS_QUEUE'),
]);

Inside the queues, it seems I don't have access to the lambda context. $_SERVER['LAMBDA_INVOCATION_CONTEXT'] is missing. Am I doing something wrong?

How can I set iamRolePolicies for function declared in constructs?

I'm using bref-php & serverless-lift & laravel-bridge library for SQS + Lambda functions, and I see that iamRoleStatement is not attached to functions declared in constructs.

constructs:
  sqs_function1:
    type: queue
    worker:
      handler: worker.php
      timeout: 600
      layers:
        - ${bref:layer.php-80}
      vpc:
        securityGroupIds:
          - sg-xxxx
        subnetIds:
          - subnet-xxxx
          - subnet-xxxx
      iamRoleStatements:
        - Effect: "Allow"
          Action:
            - "s3:*"
            - "s3-object-lambda:*"
          Resource: "*"

I tried like above but I couldn't make it & I couldn't find the documentation about this.

Exiting without providing any reason

I'm trying to use this project in a containerized fashion with Lambda (there's not a lot of docs for using Docker). I've been through the docs here and through Bref and am unsure what I'm missing/doing wrong. When processing lobs locally and within AWS I get the error:

{
    "errorMessage": "RequestId: 36907a63-97ff-478b-b1fd-630f060a8661 Error: Runtime exited without providing a reason",
    "errorType": "Runtime.ExitError"
}

Locally I'm able to use serverless invoke -f worker --file=sqs-queue-event.json to tell my local env to process the job. However both locally and in AWS that's the only feedback I get, with no errors or anything on the Laravel side. It just doesn't work 🤷 . Logs are configured to go to stderr locally and bugsnag/stderr in Lambda.

My Dockerfile:

FROM bref/php-80

ADD . /var/task

    # production-ready dependencies
RUN curl -s https://getcomposer.org/installer | php \
    && php composer.phar install  --no-interaction --optimize-autoloader --no-dev --prefer-dist --no-cache \
    && rm composer.phar

ENTRYPOINT ["php", "worker.php"]

My container is defined within the serverless architecture as:

functions:
  worker:
    reservedConcurrency: 10
    image: xxxxx.xxxxx.amazonaws.com/[project]:lambda-serverless
    events:
      # Declares that our worker is triggered by jobs in SQS
      -   sqs:
            arn: !GetAtt SendMessagesQueue.Arn
            # If you create the queue manually, the line above could be:
            # arn: 'arn:aws:sqs:us-east-1:1234567890:my_sqs_queue'
            # Only 1 item at a time to simplify error handling
            batchSize: 1

Cannot get current attempt

Is there any way to find out how often a job already failed, inside the job?
For example: If I configure the queue like in the example with maxReceiveCount: 3, I would like to know if the current execution is the first or the last job execution.

Especially knowing if it is the last execution is important, because I would like to send a notification to the developers only the last time.
The failed function inside of a job would be perfect for that, but as far as I understand this does not work with this package.

Is there any solution to this problem or am I missing something?

Question about lambda concurrency

Hi,

I usually have more than 30k messages in the queue per day and the time to process each message can take some minutes...
It seems the "Messages in Flight" floats between 50-70 per time. is it possible to consume more messages at once?
Is there an option to set the Lambda Reserved concurrency?

Thank you

Issue with Passport

I setup an app and am working with passport.

when going to the url

https://dev-patient-api.docsink.com/oauth/authorize?client_id=1301073282&redirect_uri=https://dev-biosense.bots.docsink.com/callback&response_type=code

it sends me to the login screen, once i login it redirects me to

https://icqkm1pf1d.execute-api.us-east-1.amazonaws.com/oauth/authorize?client_id=1301073282&redirect_uri=https%3A%2F%2Fdev-biosense.bots.docsink.com%2Fcallback&response_type=code

with body {"message":"Forbidden"}

i have Illuminate\Support\Facades\URL::forceRootUrl(env('APP_URL')); in the boot() function of app/Providers/AppServiceProvider.php so im unsure why its forwarding to the api-gateway url.

when i return to https://dev-patient-api.docsink.com/oauth/authorize?client_id=1301073282&redirect_uri=https://dev-biosense.bots.docsink.com/callback&response_type=code it forwards me to the right place because im already logged in.

Any ideas what i need to do to fix the incorrect redirect?

Rate Limit

There is some way to create a rate limit in the execution of the SQS, because I have a queue that processes sending email via SES, however I have a limitation of sending emails per second.

Lumen Settings lambda

Hello
I keep getting this.
"#0 /var/task/vendor/illuminate/database/Eloquent/Model.php(1223): Illuminate\Database\Eloquent\Model::resolveConnection(NULL)",
"#1 /var/task/vendor/illuminate/database/Eloquent/Model.php(1052): Illuminate\Database\Eloquent\Model->getConnection()",
"#2 /var/task/vendor/illuminate/database/Eloquent/Model.php(969): Illuminate\Database\Eloquent\Model->newBaseQueryBuilder()",
"#3 /var/task/vendor/illuminate/database/Eloquent/Model.php(1005): Illuminate\Database\Eloquent\Model->newModelQuery()",
"#4 /var/task/vendor/illuminate/database/Eloquent/Model.php(958): Illuminate\Database\Eloquent\Model->newQueryWithoutScopes()",
"#5 /var/task/vendor/illuminate/database/Eloquent/Model.php(1622): Illuminate\Database\Eloquent\Model->newQuery()",
"#6 /var/task/vendor/illuminate/database/Eloquent/Model.php(1634): Illuminate\Database\Eloquent\Model->__call('create', Array)",

Interesting when the request comes from web the connection to the db has no issues regular bref. But while doing it with lambda I get this error. I did added the security groups as defined on https://bref.sh/docs/environment/database.html

I had to remove this like from the worker in order for it to work.
//$kernel->bootstrap();

Could this be also because this is a lumen project not a full laravel version?

maybe something is not loading?

Emfile: too many open files

If anyone had this error then I found a solution for it. I hope I helped someone with this.
You need to update the .serverless file with this code:

package:
individually: true
excludeDevDependencies: false

Running tinker commands

Hello! I'm trying to run a tinker command on laravel bref application.
Command:

vendor/bin/bref cli --profile aws-profile laravel-bref-production-artisan -- tinker --execute="dump(config('app'))"

Error message:

START RequestId: 6c4f5dc1-13db-4b1d-822a-edf7bf1b2437 Version: $LATEST
[2022-11-04 21:41:19] production.ERROR: Writing to directory /.config/psysh is not allowed. {"exception":"[object] (ErrorException(code: 0): Writing to directory /.config/psysh is not allowed. at /var/task/vendor/psy/psysh/src/ConfigPaths.php:362)

Does any one have a solution on how to run laravel tinker commands in a bref application? I believe this error is related to psysh trying to write to a history log.

Example to migrate Horizon

I have just discovered the BREF package (via Serverless Chats Podcast) and I am very interested in trying it out. One of my pain points in my AWS deployment is my queue workers. I would love to move those to Lambda.

The application currently uses Laravel Horizon. I am not familiar enough with the underpinnings of horizon to apply the given documentation to a Horizon context. An example, or some documentation on converting Horizon to use this package would be a welcome addition.

This handler expected to be invoked with a API Gateway or ALB event. Instead, the handler was invoked with invalid event data: null

Hi Everyone,
I am trying to configure an API Gateway for my multiple micro-services in Laravel by Bref. However when after configuring the API gateway with the correct resources pointing to the correct lambda function. I am getting the following error and am not able to come to a solution. Please help?

{ "errorType": "Bref\\Event\\InvalidLambdaEvent", "errorMessage": "This handler expected to be invoked with a API Gateway or ALB event. Instead, the handler was invoked with invalid event data: null", "stackTrace": [ "#0 /var/task/vendor/bref/bref/src/Event/Http/HttpHandler.php(23): Bref\\Event\\Http\\HttpRequestEvent->__construct()", "#1 /var/task/vendor/bref/bref/src/Runtime/Invoker.php(29): Bref\\Event\\Http\\HttpHandler->handle()", "#2 /var/task/vendor/bref/bref/src/Runtime/LambdaRuntime.php(91): Bref\\Runtime\\Invoker->invoke()", "#3 /opt/bootstrap(43): Bref\\Runtime\\LambdaRuntime->processNextEvent()", "#4 {main}" ] }

I have also configure custom domain name and did the correct API mappings.

Errors occur during runtime when `bootstrap/cache` has `routes.php` or misses `packages.php` and `services.php`

The problem

  • a. When I deplyed my codes where boostrap/cache directory has routes.php (along with packages.php and services.php), the deployed lambda function failed because the route cache has an invalid format.
  • b. When I deplyed my codes where boostrap/cache directory has packages.php and services.php, the deployed lambda function failed because the cache directory is absent or isn't present.

Questions

  • a. Should I exlude routes.php from a deployment package?
  • b1. Should I include packages.php and services.php?
  • b2. Is it safe to deploy locally generated packages.php and services.php to Lambda? (In other words, do those caches not depned on an environment where they were generated?)

An environment

  • php: bref:layer.php-73
  • Laravel: 6.20.7
  • laravel-bridge: 1.0.0

Logs

a. when bootstrap/cache has routes.cache

START RequestId: ****-****-****-****-**** Version: $LATEST
Erroneous data format for unserializing 'Symfony\Component\Routing\CompiledRoute'
END RequestId: ****-****-****-****-****
REPORT RequestId: ****-****-****-****-****	Duration: 102.57 ms	Billed Duration: 103 ms	Memory Size: 512 MB	Max Memory Used: 17 MB	
Unknown application error occurred

b. when bootstrap/cache is empty

The /var/task/bootstrap/cache directory must be present and writable.
START RequestId: ****-****-****-****-**** Version: $LATEST
The /var/task/bootstrap/cache directory must be present and writable.
END RequestId:  ****-****-****-****-****
REPORT RequestId:  ****-****-****-****-****	Duration: 100.26 ms	Billed Duration: 101 ms	Memory Size: 512 MB	Max Memory Used: 14 MB	
Unknown application error occurred

How can I setup multiple queues in 1 application?

When I setup single queue, it works like a charm. But if I want to have multiple queues, since we can only specify one queue url in SQS_QUEUE I don't know how to setup.

The reason why I want multiple queues in 1 application is that I want to know if a specific job is still processing. To do that I separate queues for each jobs and long polling the status of queue.

Intermittent missing invocations of console commands

Hello,

I wanted to know if anyone has experienced missing invocations of some of their console commands? I have an EventBridge setup to run each minute, invoking my artisan Lambda, running schedule:run... this is working for the vast majority of jobs.

There are some commands that seem to never get run (even though they work fine using the sls invoke -f artisan --stage prod --data "artisan:command").

Here is an example of a job that should be called hourly - you can see some random gaps.

Screen Shot 2021-02-17 at 9 06 58 AM

I have checked other jobs that are more frequent, and they seem to be running on schedule (every 2 minutes) without gaps... and I have another job that is scheduled daily() that never gets invoked.

I have changed the EventBridge to use the cron(* * * * ? *) rule instead of the rate(1 minute).

Any help would be appreciated - thanks!

SQS not working.

Hello, I'm trying to run SQS but nothing works. I keep getting an error when I try to let Job go. Of course, I created an IAM to which I added full SQS access. I created worker.php and added it to the AWS_SESSION_TOKEN configuration file.

image

image

Queued jobs trigger worker lambda, but jobs are not processed

First of all: very nice work 👏 Love the possibility to go serverless with a Laravel project, and so far everything works except for jobs processing.

I setup everything with a CDK project, so I hope I am not missing something. But here is my setup:

  • 3 Lambdas (PHP-FPM with API Gateway Trigger, PHP Worker, and Console)
  • API Gateway
  • SQS Queue, which triggers the Worker lambda

The queue Lambda config looks like this:

this.worker = new lambda.Function(scope, 'WorkerHandler', {
    runtime: lambda.Runtime.PROVIDED_AL2,
    handler: 'worker.php',
    layers: [
        lambda.LayerVersion.fromLayerVersionArn(
            scope,
            'BrefPHPWorkerLayer',
            'arn:aws:lambda:eu-central-1:209497400698:layer:php-81:16'
        ),
        lambda.LayerVersion.fromLayerVersionArn(
            scope,
            'ConsoleLayer',
            'arn:aws:lambda:eu-central-1:209497400698:layer:console:55'
        ),
    ],
    code: codeBundle,
    memorySize: 512,
    environment,
    timeout: cdk.Duration.minutes(2),
})

The job that I trigger simply does

/**
 * Execute the job.
 *
 * @return void
 */
public function handle()
{
    Log::info('IT WORKED!');
}

Debugging Setup

In the worker.php I placed a log which just logs Log::info('WORKER STARTED!');. I also went ahead and put a log in the LaravelSqsHandler within the handleSqs method, before the foreach loop

Actual result

Now, when a message lands in the queue, it definitely get's handled, this is what I see in the logs:

Bildschirmfoto 2021-12-28 um 13 15 26

Where I expected to also see IT WORKED!. What am I missing here? Thank you for a hint.

Cannot parse "serverless.yml": unknown tag !<!node_modules/**>

I'm running Laravel 8, Bref 1.3 and Laravel-Bridge 1.1

When I run serverless deploy

I got this error:

Cannot parse "serverless.yml": unknown tag !<!node_modules/**> in "/Users/aws/Desktop/laravel-aws-lambda/serverless.yml" (16:9)

13 | # Directories to exclude from deplo ...
14 | patterns:
15 | - !node_modules/**
16 | - !public/storage
--------------^
17 | - !resources/assets/**
18 | - !storage/**

Does anybody face this problem?

Bump to L8

Any plans to upgrade the dependencies to support Laravel 8 anytime soon?

AWS_SESSION_TOKEN missing on Lambda

Hi,

When debugging the filesystems settings, I see that the token was not added as described in the documentation: https://bref.sh/docs/frameworks/laravel.html#file-storage-on-s3

That's it! The 'AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY' and 'AWS_SESSION_TOKEN' variables are defined automatically on AWS Lambda, you don't have to define them.

The result of Laravel's dd command returns the configuration array as below without TOKEN.

"s3" => array:9 [
       "driver" => "s3"
       "key" => "ASIAZ7N74ORB26CAAAAA"
       "secret" => "EC3K2NFgsij3oUHYo7HDqAd21+iYoQ6BWNRAAAAA"
       "token" => null
       "region" => "us-east-1"
       "bucket" => "my-bucket"
       "url" => null
       "endpoint" => null
       "root" => "/my-path"
]

Any idea what it could be?
Thanks

SQS Exception: 404 Not Found on DeleteMessage

Thanks a ton for putting this repo out there. Can't wait to use it!

Using Laravel 7/latest.

I am not having any trouble inserting queued jobs, but the worker lambda function gets an error trying to use DeleteMessage. Looks like the prefix or account number is missing. I followed your handler.php script exactly. Feels like I'm missing something quite obvious.

EnvVars:

QUEUE_CONNECTION=sqs
SQS_QUEUE=queue-name
SQS_PREFIX=https://sqs.us-east-2.amazonaws.com/##########

Logs:

Invoke Error	{"errorType":"Aws\\Sqs\\Exception\\SqsException","errorMessage":"Error executing \"DeleteMessage\" on \"https:\/\/sqs.us-east-2.amazonaws.com\/queue-name\"; AWS HTTP error: Client error: `POST https:\/\/sqs.us-east-2.amazonaws.com\/queue-name` resulted in a `404 Not Found` response:\n<?xml version=\"1.0\"?><ErrorResponse xmlns=\"http:\/\/queue.amazonaws.com\/doc\/2012-11-05\/\"><Error><Type>Sender<\/Type><Code>I (truncated...)\n InvalidAddress (client): The address queue-name is not valid for this endpoint. - <?xml version=\"1.0\"?><ErrorResponse xmlns=\"http:\/\/queue.amazonaws.com\/doc\/2012-11-05\/\"><Error><Type>Sender<\/Type><Code>InvalidAddress<\/Code><Message>The address queue-name is not valid for this endpoint.<\/Message><Detail\/><\/Error><RequestId>f9c8c3e8-7f30-59cb-8e4f-94c22c91574c<\/RequestId><\/ErrorResponse>","stack":["#0 \/var\/task\/vendor\/aws\/aws-sdk-php\/src\/WrappedHttpHandler.php(97): Aws\\WrappedHttpHandler->parseError()","#1 \/var\/task\/vendor\/guzzlehttp\/promises\/src\/Promise.php(203): Aws\\WrappedHttpHandler->Aws\\{closure}()","#2 \/var\/task\/vendor\/guzzlehttp\/promises\/src\/Promise.php(174): GuzzleHttp\\Promise\\Promise::callHandler()","#3 \/var\/task\/vendor\/guzzlehttp\/promises\/src\/RejectedPromise.php(40): GuzzleHttp\\Promise\\Promise::GuzzleHttp\\Promise\\{closure}()","#4 \/var\/task\/vendor\/guzzlehttp\/promises\/src\/TaskQueue.php(47): GuzzleHttp\\Promise\\RejectedPromise::GuzzleHttp\\Promise\\{closure}()","#5 \/var\/task\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/CurlMultiHandler.php(119): GuzzleHttp\\Promise\\TaskQueue->run()","#6 \/var\/task\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/CurlMultiHandler.php(146): GuzzleHttp\\Handler\\CurlMultiHandler->tick()","#7 \/var\/task\/vendor\/guzzlehttp\/promises\/src\/Promise.php(246): GuzzleHttp\\Handler\\CurlMultiHandler->execute()","#8 \/var\/task\/vendor\/guzzlehttp\/promises\/src\/Promise.php(223): GuzzleHttp\\Promise\\Promise->invokeWaitFn()","#9 \/var\/task\/vendor\/guzzlehttp\/promises\/src\/Promise.php(267): GuzzleHttp\\Promise\\Promise->waitIfPending()","#10 \/var\/task\/vendor\/guzzlehttp\/promises\/src\/Promise.php(225): GuzzleHttp\\Promise\\Promise->invokeWaitList()","#11 \/var\/task\/vendor\/guzzlehttp\/promises\/src\/Promise.php(267): GuzzleHttp\\Promise\\Promise->waitIfPending()","#12 \/var\/task\/vendor\/guzzlehttp\/promises\/src\/Promise.php(225): GuzzleHttp\\Promise\\Promise->invokeWaitList()","#13 \/var\/task\/vendor\/guzzlehttp\/promises\/src\/Promise.php(62): GuzzleHttp\\Promise\\Promise->waitIfPending()","#14 \/var\/task\/vendor\/aws\/aws-sdk-php\/src\/AwsClientTrait.php(58): GuzzleHttp\\Promise\\Promise->wait()","#15 \/var\/task\/vendor\/aws\/aws-sdk-php\/src\/AwsClientTrait.php(86): Aws\\AwsClient->execute()","#16 \/var\/task\/vendor\/laravel\/framework\/src\/Illuminate\/Queue\/Jobs\/SqsJob.php(71): Aws\\AwsClient->__call()","#17 \/var\/task\/vendor\/laravel\/framework\/src\/Illuminate\/Queue\/CallQueuedHandler.php(66): Illuminate\\Queue\\Jobs\\SqsJob->delete()","#18 \/var\/task\/vendor\/laravel\/framework\/src\/Illuminate\/Queue\/Jobs\/Job.php(98): Illuminate\\Queue\\CallQueuedHandler->call()","#19 \/var\/task\/vendor\/bref\/laravel-bridge\/src\/Queue\/LaravelSqsHandler.php(87): Illuminate\\Queue\\Jobs\\Job->fire()","#20 \/var\/task\/vendor\/bref\/laravel-bridge\/src\/Queue\/LaravelSqsHandler.php(69): Bref\\LaravelBridge\\Queue\\LaravelSqsHandler->process()","#21 \/var\/task\/vendor\/bref\/bref\/src\/Event\/Sqs\/SqsHandler.php(18): Bref\\LaravelBridge\\Queue\\LaravelSqsHandler->handleSqs()","#22 \/var\/task\/vendor\/bref\/bref\/src\/Runtime\/LambdaRuntime.php(104): Bref\\Event\\Sqs\\SqsHandler->handle()","#23 \/opt\/bref\/bootstrap.php(38): Bref\\Runtime\\LambdaRuntime->processNextEvent()","#24 {main}"]}

Laravel app is not creating XSRF-TOKEN cookie

As per laravel docs, every application should create encrypted XSRF-TOKEN cookie. I also have this cookie on my dev environment but not on lambda function.

This is the cookie missing on lambda function.
image

I've tried adding custom header for lambda function in serverless file, like:

functions:
  # This function runs the my website/API
  web:
    handler: public/index.php
    timeout: 28 # in seconds (API Gateway has a timeout of 29 seconds)
    layers:
      - ${bref:layer.php-74-fpm}
      - ${bref:extra.gd-php-74}
    events:
      - httpApi: '*'
        cors:
          origin: '*'
          headers:
            - X-XSRF-TOKEN

I use this to on the frontend(Inertia) application for axios requests.

Does someone has any idea if I'm missing something?

The security token included in the request is invalid.

I'm getting the below issue with the latest laravel and laravel-bridge latest.

Error executing "SendMessage" on "https://sqs.ap-southeast-1.amazonaws.com/{id}/testing-queue"; AWS HTTP error: Client error: `POST https://sqs.ap-southeast-1.amazonaws.com/{id}/testing-queue` resulted in a `403 Forbidden` response:
<?xml version="1.0"?><ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><Error><Type>Sender</Type><Code>I (truncated...)
InvalidClientTokenId (client): The security token included in the request is invalid. - <?xml version="1.0"?><ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><Error><Type>Sender</Type><Code>InvalidClientTokenId</Code><Message>The security token included in the request is invalid.</Message><Detail/></Error><RequestId>{request_id}</RequestId></ErrorResponse>

Anyone having issue like me?

My IAM has full administrator access and my testing repo looks exactly like the https://github.com/brefphp/examples/tree/master/Laravel/queues except mine is using the latest laravel and bref latest.

Thanks

Root composer.json requires bref/laravel-bridge ^0.2.3 -> satisfiable by bref/laravel-bridge[0.2.3].

I am using laravel 5.8 and getting this error while composer require .

Using version ^0.5.32 for bref/bref
Using version ^0.2.3 for bref/laravel-bridge
./composer.json has been updated
Running composer update bref/bref bref/laravel-bridge
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - illuminate/queue[v6.0.0, ..., 6.x-dev] require illuminate/console ^6.0 -> found illuminate/console[v6.0.0, ..., 6.x-dev] but it conflicts with another require.
    - illuminate/queue[v7.0.0, ..., 7.x-dev] require illuminate/console ^7.0 -> found illuminate/console[v7.0.0, ..., 7.x-dev] but it conflicts with another require.
    - illuminate/queue[v8.0.0, ..., 8.x-dev] require illuminate/console ^8.0 -> found illuminate/console[v8.0.0, ..., 8.x-dev] but it conflicts with another require.
    - bref/laravel-bridge 0.2.3 requires illuminate/queue ^6.0|^7.0|^8.0 -> satisfiable by illuminate/queue[v6.0.0, ..., 6.x-dev, v7.0.0, ..., 7.x-dev, v8.0.0, ..., 8.x-dev].
    - Root composer.json requires bref/laravel-bridge ^0.2.3 -> satisfiable by bref/laravel-bridge[0.2.3].


Installation failed, reverting ./composer.json and ./composer.lock to their original content.

How to resolve this?

Running with laravel mix

i trying bref using laravel mix for assets but i got error like this. what happend?

Deploying laravel to stage dev (us-east-1)
× Stack laravel-dev failed to deploy (426s)
Environment: win32, node 16.14.0, framework 3.3.0 (local) 3.4.0v (global), plugin 6.1.0, SDK 4.3.1
Credentials: Local, "default" profile
Docs:        docs.serverless.com
Support:     forum.serverless.com
Bugs:        github.com/serverless/serverless/issues

Error:
CREATE_FAILED: websiteCDN060D946D (AWS::CloudFront::Distribution)
Resource handler returned message: "Access denied for operation 'Your account must be verified before you can add new CloudFront resources. To verify your account, please contact AWS Support (https://console.aws.amazon.com/support/home#/) and include this error message. (Service: CloudFront, Status Code: 403, Request ID: a550e902-1439-4b41-ac88-xxx, Extended Request ID: null)'." (RequestToken: ef02649a-8aa7-81e5-5140-xxx, HandlerErrorCode: AccessDenied)

View the full error: https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stack/detail?stackId=arn%3Aaws%3Acloudformation%3Aus-east-1%3A298724920849%3Astack%2Flaravel-dev%2F42e21f90-96e7-11ec-8f3b-xxx

Support for async-aws

Would you be interested in switching this package to use the relevant async aws packages, like the main brief package. I can help with this. :)

Using Bref with Docker

Hey folks, thanks for putting together such an extensive project with brefphp, it's really paved the way for using Lambda. I'm building a prototype with Lambda to try to understand it further. I've built a docker container for my app with the following...

FROM bref/php-80

ADD . /var/task

    # production-ready dependencies
RUN curl -s https://getcomposer.org/installer | php \
    && php composer.phar install  --no-interaction --optimize-autoloader --no-dev --prefer-dist --no-cache \
    && rm composer.phar

ENTRYPOINT ["php", "worker.php"]

I wanted to put the Dockerfile here in case it's useful to other folks who are trying to use lambda in a containerized fashion. For what it's worth, I haven't gotten this actually working yet, though in CloudWatch I'm not seeing any errors. I've reached my time box on when I'm able to investigate this exploration, I hope to continue another time!

Upload to S3 failed - InvalidAccessKeyId

Hi, I'm using an S3 bucket to save files from Laravel application uploads. When trying to upload the file, I get the following error:

[previous exception] [object] (GuzzleHttp\\Exception\\ClientException(code: 403): Client error: `PUT https://my-bucket.s3.amazonaws.com/1077c090.png` resulted in a `403 Forbidden ` response:
<Error><Code>InvalidAccessKeyId</Code><Message>The AWS Access Key Id you provided does not exist in our records.</Message><AWSAccessKeyId>ASIAZ7N74ORBT6RJ5AAA</AWSAccessKeyId><RequestId>KFZADDG3V6QX8AAA</RequestId><HostId >IH1lvnySucUhfJBX7k2HAAA=</HostId></Error> {"userId":2,"exception":"[object] (Aws\\S3\\Exception\\S3Exception(code: 0): Error executing \"PutObject\" on \"https://my-bucket.s3.amazonaws.com/1077c090.png\"; AWS HTTP error: Client error: `PUT https://my-bucket.s3.amazonaws.com/1077c090.png` resulted in a `403 Forbidden` response:

The problem in this case is that the second error says that the access key is invalid. I don't know where he gets this key from, it's not the key I inform in the .env file.

What is this key that it displays in the error: <AWSAccessKeyId>ASIAZ7N74ORBT6RJ5AAA</AWSAccessKeyId>?
(not the original key that displays on panel, omitted characters).

Any idea what it could be?
Thanks

Question about lambda workers doing local operations

Hello,

I'm wondering what would be the best approach to the following scenario:

  1. There are "retrieve data" jobs are dispatched to make requests to external APIs. The worker retrieves the data, stores it in a file (json/xml), dispatches "process data" jobs and marks the request as being retrieved. There are 10s of thounthands of external requests to be made and I have a table to store the status for each one (pending/queued/retrieved/processed) so that I don't push the same request to the queue multiple times.
  2. The "process data" jobs parses the file, extracts the required data and performs some MySql queries (delete/update/create) to insert the processed data into the database

I have a VPS for the site and Mysql and I want to offload the retrieval and processing to AWS Lambda but I don't think the lambda can perform the database queries. What are my options here? The best I could come up so far is this using webhooks:

  1. Have a webhook to notify that the data was retrieved for a particular request
  2. Store the results of the processing in a S3 bucket and notify the site about the location of the file
  3. Have the main site perform the required queries to import the data

Are there better options?

Thank you.

trusted proxies gets overwritten

Hi

I have a case where the trusted proxies should allow all ($proxies = '*';).
It seems that the package overwrites the config that's been set in the TrustProxies middleware.

My solution now is to overwrite the config again in the AppServiceProvider. Is this the preferred way?

Shouldn't it be better to provide a config/serverless.php configuration file, and make that behaviour configurable?

Fifo Queue

Using this package allows sqs as event triggers for lambda.

Im wondering if there are any side effects if we use it for FIFO queue?

ty

[Solution] No such file or directory, touch() or mkdir().

If you have a problem with storage in Lambda, then I believe this solution is for you. Please check your logs and try to find any of these problems if you have this then try to do what is in this issue:

"touch(): Unable to create file", "mkdir()", "No such file or directory"

I used spatie media-library in my project, and I had a problem with storage media in /tmp, but for a long time I found a solution for that.

Solution for that is to install extra-php-extensions and update config file

unknown

After that, you should update app.php file in bootstrap

unknown (1)

Now everything should work fine :)

Different lamda confirguration for some jobs

Hi! Is it possible to have several SQS queues and connections and map them to different lamda instances using bref?

For example, I have regular queue tasks that can be processed on 1gb lambda instance, and a cpu intensive tasks that requires a 5-10gb lamda instance. Currently I have several servers and map tasks between them using different ‘artisan queue:work —connection={name}’ workers.

Is it something that bref/serverless can handle?

issues when deploying via CI vs locally

I've got a barebones Laravel 8 project, setup per instructions at https://bref.sh/docs/frameworks/laravel.html. (The only difference is I'm using HTTP API).

When I deploy from my local machine the default welcome view renders without issue. When I deploy via CI I get this error with the welcome view: There is no existing directory at "/var/task/storage/logs" and it could not be created: Read-only file system.

I don't believe there is any issue with the serverless portion of this as comparing the debug output (with SLS_DEPLOY=1) didn't show many differences.

I compared the output of my .serverless/project.zip that was created on my machine vs in CI and the only noticeable differences I saw was my CI version was missing:

bootstrap/cache/packages.php
bootstrap/cache/services.php

My ci config is as such:

curl -sS https://getcomposer.org/installer | php
php composer.phar install --no-dev --no-progress --prefer-dist
serverless deploy -v -s staging

Any thoughts on what I might be doing wrong?

SQS Not Executing Job

Hey guys,

First time setting up the Laravel Bridge to work with SQS and hoping you can shed some insight into why I cannot get it working.

I have deployed my Laravel application to Lambda, and it has created the jobsWorker Lambda Function as well as the SQS Queue and DQL. I am able to push jobs to the queue and I can see they are inflight, however after a few attempts it gets sent to the DLQ.

Inside my Job I have a message that gets captured to Sentry so I can see it's run for debugging purposes, however the Job doesn't seem to be getting ran.

I have added the construct to the Serverless.yml file:

constructs:
  jobs:
    type: queue
    worker:
      handler: worker.php
      layers:
        - ${bref:layer.php-81}

This is my worker file:

<?php declare(strict_types=1);

use Bref\LaravelBridge\Queue\LaravelSqsHandler;
use Illuminate\Foundation\Application;

require __DIR__ . '/vendor/autoload.php';
/** @var Application $app */
$app = require __DIR__ . '/bootstrap/app.php';

/**
 * For Lumen, use:
 * $app->make(Laravel\Lumen\Console\Kernel::class);
 * $app->boot();
 */
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
$kernel->bootstrap();

return $app->makeWith(LaravelSqsHandler::class, [
    'connection' => 'sqs', // this is the Laravel Queue connection
    'queue' => getenv('SQS_QUEUE'),
]);

Any help would be appreciated!

-- EDIT --

I have added a Log::debug() inside the worker.php and can see in Cloudwatch that it is being triggered.

Within the logs for the jobsWorker I can also see the following message:
Task timed out after 6.01 seconds

What is the purpose of this repository?

I noticed this repository has a package-like style and I was wondering if you're thinking about providing a package that makes it easy to use Bref on Laravel context.

I would be willing to provide with a Pull Request that brings 2 components to this repository: Bref Facade and Lambda Queue Job and Worker.
You can find the code for these here: https://github.com/deleugpn/laravel-lambda/tree/master/app/Components

The relevance of the Bref Facade is to hide the lambda() helper behind an interface that can be swapped using the Laravel IoC container in order to help writing test code. Laravel developers are used to having a toolbox of test suite easy to use and swap implementations when needed.

The Lambda Worker is an extension of the artisan command queue:work that will fetch events from the lambda() helper (using the facade), build a Laravel job class and send it over to the Worker to work it out.

Another thing I can suggest keeping in this repository would be a version of the artisan file that uses an environment variable to decide which command is being issued: https://github.com/deleugpn/laravel-lambda/blob/master/artisan#L39
The motivation for changing the artisan can be found here: brefphp/bref#118 (comment)

aws/aws-sdk-php and guzzlehttp/psr problem when installing the bridge

I'm just getting started using bref and the laravel-bridge and ran into an issue when requiring the dependencies.

Stack

  • Fresh install of Laravel.
  • Local instance on Docker w/ Sail.
  • No additional deps required yet.

Error

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - aws/aws-sdk-php[3.134.0, ..., 3.173.19] require guzzlehttp/psr7 ^1.4.1 -> found guzzlehttp/psr7[1.4.1, ..., 1.x-dev] but the package is fixed to 2.0.0 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.
    - aws/aws-sdk-php[3.173.20, ..., 3.185.18] require guzzlehttp/psr7 ^1.7.0 -> found guzzlehttp/psr7[1.7.0, ..., 1.x-dev] but the package is fixed to 2.0.0 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.
    - bref/laravel-bridge 1.1.0 requires aws/aws-sdk-php ^3.134 -> satisfiable by aws/aws-sdk-php[3.134.0, ..., 3.185.18].
    - Root composer.json requires bref/laravel-bridge ^1.1 -> satisfiable by bref/laravel-bridge[1.1.0].

Steps to reproduce

# Install a fresh version of Laravel
curl -s "https://laravel.build/laravel-bref-testing?with=mysql,redis" | bash
cd laravel-bref-testing

# Publish the Sail assets, not required but I did it.
php artisan sail:publish

# Build the app container
sail build --no-cache

# Start the stack
sail up -d

# Install bref/bref and bref/laravel-bridge
sail composer require bref/bref bref/laravel-bridge

Any help would be greatly appreciated, thanks!

Stack channel logging issue

Hey! I'm having an issue when using the package because of line 46 of BrefServiceProvider:

// We change Laravel's default log destination to stderr
$logDriver = Config::get('logging.default');
if ($logDriver === 'stack') {
    Config::set('logging.default', 'stderr');
}

We're using multi-channel logging, and our stack channel already include stderr. Config bellow:

'stack' => [
    'driver' => 'stack',
    'channels' => ['stderr', 'bugsnag'],
    'ignore_exceptions' => false,
],

When using the package the bugsnag just stop working.

Couldn't we just leave this to user or at least change approach to just ensure stack contains stderr instead of changing logging.default (like below example)?

// We change Laravel's default log destination to stderr
$logDriver = Config::get('logging.default');
if ($logDriver === 'stack') {
    $channels = Config::get('logging.channels.stack.channels', []);
    array_push($channels, 'stderr');
    Config::set('logging.channels.stack.channels', array_unique($channels));
}

bref 1.0 support

Hi, it would be nice to update the bref dependency to support version ^1.0.


  Problem 1
    - bref/laravel-bridge 0.2.3 requires bref/bref ~0.5.20 -> satisfiable by bref/bref[0.5.20, 0.5.21, 0.5.22, 0.5.23, 0.5.24, 0.5.25, 0.5.26, 0.5.27, 0.5.28, 0.5.29, 0.5.30, 0.5.31, 0.5.32, 0.5.33, 0.5.x-dev] but these conflict with your requirements or minimum-stability.
    - bref/laravel-bridge 0.2.3 requires bref/bref ~0.5.20 -> satisfiable by bref/bref[0.5.20, 0.5.21, 0.5.22, 0.5.23, 0.5.24, 0.5.25, 0.5.26, 0.5.27, 0.5.28, 0.5.29, 0.5.30, 0.5.31, 0.5.32, 0.5.33, 0.5.x-dev] but these conflict with your requirements or minimum-stability.
    - Installation request for bref/laravel-bridge ^0.2.3 -> satisfiable by bref/laravel-bridge[0.2.3].```

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.