6

I am deploying a Laravel application to the ElasticBeanstalk. Now, I am trying to SSH into the EC2 instance of my Beanstalk environment and run a command.

php artisan migrate --force

But I cannot run it. The command is failing because it is not getting the environment variables set in the Beanstalk Environment. Here is what I did.

I ssh into the instance. Then I go to the /var/www/html folder. Then I run the "php artisan migrate --force" command. As I mentioned it is failing because it is not getting the database credentials set in the Beanstalk environment. I also tried this.

sudo -u root php artisan migrate --force

The same thing happened. I also played around with tinker in the terminal. When I retrieve the app name like env('APP_NAME'), it is returning null. What is the issue and how can I fix it?

Wai Yan Hein
  • 13,651
  • 35
  • 180
  • 372
  • I recently faced this... It took a while to resolve it with support and the EB service team but in the end it was because my env variables contained special characters which broke the deploy scripts at the point where envvars were being copied to the instance; if your envvars have special characters you’ll need to change them (at least we did). – hephalump Jul 14 '20 at 02:24

1 Answers1

20

The command is failing because it is not getting the environment variables set in the Beanstalk Environment.

On Amazon Linux 2 (AL2), the EB env variables are stored in /opt/elasticbeanstalk/deployment/env. Thus when you ssh to your EB instance, you can use the following to populate your env variables (need to sudo to root firs):

sudo su 
export $(cat /opt/elasticbeanstalk/deployment/env | xargs)
echo $YOU_ENV_NAME_FORM_EB 

This is undocumented way of doing this on AL2.

Note:

The env variables shouldn't have spaces. Also the file is not immediately available. It gets created when deployment succeeds.

Marcin
  • 215,873
  • 14
  • 235
  • 294