Joe
Joe

Reputation: 1

AWS Elastic Beanstalk - .ebextensions

My app currently uses a folder called "Documents" that is located in the root of the app. This is where it stores supporting docs, temporary files, uploaded files etc. I'm trying to move my app from Azure to Beanstalk and I don't know how to give permissions to this folder and sub-folders. I think it's supposed to be done using .ebextensions but I don't know how to format the config file. Can someone suggest how this config file should look? This is an ASP.NET app running on Windows/IIS.

Upvotes: 0

Views: 2412

Answers (4)

A. Pearce
A. Pearce

Reputation: 48

See this answer on Serverfault.

There are platform hooks that you can use to run scripts at various points during deployment that can get you around the shortcomings of the .ebextension Commands and Platform Commands that Napoli describes.

There seems to be some debate on whether or not this setup is officially supported, but judging by comments made on the AWS github, it seems to be not explicitly prohibited.

I can see where Napoli's answer could be the more standard MS way of doing things, but wpp.targets looks like hot trash IMO.

The general scheme of that answer is to use Commands/Platform commands to copy a script file into the appropriate platform hook directory (/opt/elasticbeanstalk/hooks or C:\Program Files\Amazon\ElasticBeanstalk\hooks\ ) to run at your desired stage of deployment.

I think its worth noting that differences exist between platforms and versions such as Amazon Linux 1 and Linux 2.

I hope this helps someone. It took me a day to gather that info and what's on this page and pick what I liked best.

Edit 11/4 - I would like to note that I saw some inconsistencies with the File .ebextension directive when trying to place scripts drirectly into the platform hook dir's during repeated deployments. Specifically the File directive failed to correctly move the backup copies named .bak/.bak1/etc. I would suggest using a Container Command to copy with overwriting from another directory into the desired hook directory to overcome this issue.

Upvotes: 0

Bira
Bira

Reputation: 5506

Place a file 01_fix_permissions.config inside .ebextensions folder.

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/49_change_permissions.sh":
mode: "000755"
owner: root
group: root
content: |
  #!/usr/bin/env bash
  sudo chown -R ec2-user:ec2-user tmp/

Following that you can set your folder permissions as you want.

Upvotes: 0

Napoli
Napoli

Reputation: 1403

Unfortunately, you cannot use .ebextensions to set permissions to files/folders within your deployment directory.

If you look at the event hooks for an elastic beanstalk deployment: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-windows-ec2.html#windows-container-commands

You'll find that commands run before the ec2 app and web server are set up, and container_commands run after the ec2 app and web server are setup, but before your application version is deployed.

The solution is to use a wpp.targets file to set the necessary ACLs. The following SO post is most useful Can Web Deploy's setAcl provider be used on a sub-directory?

Upvotes: 1

sudheerchamarthi
sudheerchamarthi

Reputation: 1241

Given below is the sample .ebextensions config file to create a directory/file and modify the permissions and add some content to the file

====== .ebextensions/custom_directory.config ======

commands:
  create_directory:
    command: mkdir C:\inetpub\AspNetCoreWebApps\backgroundtasks\mydirectory
    command: cacls C:\inetpub\AspNetCoreWebApps\backgroundtasks\mydirectory /t /e /g username:W
files:
 "C:/inetpub/AspNetCoreWebApps/backgroundtasks/mydirectory/mytestfile.txt":
   content: |
     This is my Sample file created from ebextensions

ebextensions go into the root of the application source code through a directory called .ebextensions. For more information on how to use ebextensions, please go through the documentation here

Upvotes: 0

Related Questions