Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Elastic BeanStalk app deploy post hook not executing my command

I recently was able to get my Laravel app deployed using codepipeline on Elastic Beanstalk but ran into a problem. I noticed that my routes where failing because of php.conf Nginx configuration. I had to add a few lines of code to EB's nginx php.conf file to get it to work.

My problem now was that after every deployment, the instance of the application I modified the php.conf file was destroyed and recreated fresh. I wanted a way to dynamically update the file after every successful deployment. I had a version of the file I wanted versioned with my application and so wanted to create a symlink to that file after deployment.

After loads of research, I stumbled on appDeploy Hooks on Elastic Beanstalk that runs post scripts after deployment so did this

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/91_post_deploy_script.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      sudo mkdir /var/testing1
      sudo ln -sfn /var/www/html/php.conf.example /etc/nginx/conf.d/elasticbeanstalk/php.conf
      sudo mkdir /var/testing
      sudo nginx -s reload

And this for some reason does not work. The symlink is not created so my routes are still not working..

I even added some mkdir so am sure the commands in that script runs, none of those commands ran because none of those directories where created.

Please note that if I ssh into the ec2 instance and run the commands there it works. That bash script also exists in the post directory and if I manually run in on the server it works too.

Any pointers to how I could fix this would be helpful. Maybe I am doing something wrong too.

Now I have gotten my scripts to run by following this. However, the script is not running. I am getting an error

2020/06/28 08:22:13.653339 [INFO] Following platform hooks will be executed in order: [01_myconf.config]
2020/06/28 08:22:13.653344 [INFO] Running platform hook: .platform/hooks/postdeploy/01_myconf.config
2020/06/28 08:22:13.653516 [ERROR] An error occurred during execution of command [app-deploy] - [RunPostDeployHooks]. Stop running the command. Error: Command .platform/hooks/postdeploy/01_myconf.config failed with error fork/exec .platform/hooks/postdeploy/01_myconf.config: permission denied 

I tried to follow this forum post here to make my file executable by adding to my container command a new command like so:

01_chmod1:
        command: "chmod +x .platform/hooks/postdeploy/91_post_deploy_script.sh"

I am still running into the same issue. Permission denied

like image 373
Omene Joseph Ogheneruno Avatar asked Jun 27 '20 13:06

Omene Joseph Ogheneruno


1 Answers

Sadly, the hooks you are describing (i.e. /opt/elasticbeanstalk/hooks/appdeploy) are for Amazon Linux 1.

Since you are using Amazon Linux 2, as clarified in the comments, the hooks you are trying to use do not apply. Thus they are not being executed.

In Amazon Linux 2, there are new hooks as described here and they are:

prebuild – Files here run after the Elastic Beanstalk platform engine downloads and extracts the application source bundle, and before it sets up and configures the application and web server.

predeploy – Files here run after the Elastic Beanstalk platform engine sets up and configures the application and web server, and before it deploys them to their final runtime location.

postdeploy – Files here run after the Elastic Beanstalk platform engine deploys the application and proxy server.

The use of these new hooks is different than in Amazon Linux 1. Thus you have to either move back to Amazon Linux 1 or migrate your application to Amazon Linux 2.

General migration steps from Amazon Linux 1 to Amazon Linux 2 in EB are described here

like image 132
Marcin Avatar answered Sep 28 '22 14:09

Marcin