Giter Site home page Giter Site logo

dnxlabs / laravel-queue-aws-batch Goto Github PK

View Code? Open in Web Editor NEW

This project forked from lukewaite/laravel-queue-aws-batch

13.0 2.0 8.0 88 KB

A Laravel queue connector for AWS Batch

Home Page: https://dnx.solutions

License: MIT License

PHP 100.00%

laravel-queue-aws-batch's Introduction

Laravel Queue for AWS Batch

Latest Version on Packagist Software License Build Status Code Coverage

Supported Versions

Laravel Version Package Tag Supported
6.0.x 3.0.x yes

Installation

See the table above for package version information, and change the version below accordingly.

Add custom repository to your composer json:

    "require": {
        "dnxlabs/laravel-queue-aws-batch": "~3.0.0"
    },
    "repositories": [
        {
            "type": "vcs",
            "url":  "[email protected]:dnxlabs/laravel-queue-aws-batch.git"
        }
    ]

Using composer, run:

composer require dnxlabs/laravel-queue-aws-batch ~3.0

Usage

  1. Your Laravel application will need to be dockerized and pushed into a container registry of your choice. The ENTRYPOINT should be set to artisan.

  2. Add a new queue to your config/queues.php config file's connections array:

    [
        'batch' => [
            'driver' => 'batch',
            'table' => 'jobs',
            'queue' => 'first-run-job-queue',
            'jobDefinition' => 'my-job-definition',
            'expire' => 60,
            'region' => 'us-east-1'
        ]
    ]

This queue transport depends on being able to write it's queue jobs to a database queue. In this example, it writes it's jobs to the jobs table. You'll need to use the artisan queue:table to create a migration to create this table.

  1. Create an AWS Batch job queue with the same name as the queue config setting. This is where the Batch connector will push your jobs into Batch. In this case, my queue name would be first-run-job-queue.

  2. Create a AWS Batch job definition for each queue you define that looks something like this:

{
    "jobDefinitionName": "my-laravel-application",
    "type": "container",
    "parameters": {},
    "retryStrategy": {
        "attempts": 10
    },
    "containerProperties": {
        "image": "<your docker image>",
        "vcpus": 1,
        "memory": 256,
        "command": [
            "queue:work-batch",
            "Ref::jobId",
            "--tries=3"
        ],
        "volumes": [],
        "environment": [],
        "mountPoints": [],
        "ulimits": []
    }
}

Here, you configure your container to start, run the queue:work-batch command (assuming artisan is your entrypoint) and pass in the name of the queue, first-run-job-queue as well as the Ref::jobId param, which is passed in when the Batch connector creates the job.

It is important that you configure a retryStrategy with more "attempts" than you are running tries if you provide that argument. Otherwise, Batch will not retry your job if it fails. Laravel 5.1 does not write to the failed job queue until the next run after tries has been exceeded by jobs failing. Newer versions will write to the queue in the same run, so this requirement can be relaxed later.

  1. Add the Service Provider to your application:
    • In config/app.php add to the providers array: DNXLabs\LaravelQueueAwsBatch\BatchQueueServiceProvider::class

Limitations

Delayed Jobs

AWS Batch has no method to delay a job and as it's our runner, we don't have an easy work around. If you require delayed jobs for your use case, at this point my recommendation would be to use a regular DB queue, and to fire a job into it which will fire your batch job at the correct time.

laravel-queue-aws-batch's People

Contributors

lukewaite avatar antonioftamura avatar sohflp avatar

Stargazers

Jason McCallister avatar Paul Ayuk avatar Zachary Hickson avatar Kentaro IMAI avatar  avatar Mark avatar ucan-lab avatar Bharat Dhaker avatar SANKAR SUDA avatar toni dy avatar John-Hiroshi avatar Jae J avatar Justin Dray avatar

Watchers

James Cloos avatar  avatar

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.