tixelrocks/long-env
long-env
An env() alternative that works with long multi-line environment variables in places where it's not possible to do so natively - eg. AWS Elastic Beanstalk
Imagine you want to run Laravel Passport in AWS so you need to pass your private key as a PASSPORT_PRIVATE_KEY environment variable but hey 1) AWS doesn't allow multi-line environment variables 2) AWS has a limit of 4096 character per environment variable.
So you end up getting an annoying error like this:
Service:AmazonCloudFormation, Message:Template format error: Parameter 'EnvironmentVariables' default value '[****]' length is greater than 4096.
Solution
Our solution is simple, go to config/passport.php and replace
<?php
return [
'private_key' => env('PASSPORT_PRIVATE_KEY')
];
with:
return [
'private_key' => long_env('PASSPORT_PRIVATE_KEY')
];
And now pass your long variable as numbered chunks instead of one super long string:
PASSPORT_PRIVATE_KEY1=
PASSPORT_PRIVATE_KEY2=
PASSPORT_PRIVATE_KEY3=
# and so on
The long_env() function will magically combine them together for you. If you need help making the
chunks, just use the long_env_prepare() function provided with this package:
<?php
json_encode(long_env_prepare('KEY', 'SUPER LONG STRING'), JSON_PRETTY_PRINT);
{
"KEY1": "-----BEGIN PRIVATE K",
"KEY2": "EY-----\ndasokd aoskd",
"KEY3": "o aksdoaskd oaskdo a"
}
That's it - copy & paste these one by one into your dashboard (eg. AWS Elastic Beanstalk's Configuration tab)
Related Packages
An authentication driver for Laravel for authenticating users in AWS Cognito Use...
Run Laravel (or Lumen) tasks and queue listeners inside of AWS Elastic Beanstalk...
Custom SQS connector for Laravel that supports custom format JSON