If you are working on multi-server application environment where you have a requirement to share a file system between multiple servers, then you got to setup NFS (Network File System).
NFS let you share the file system on more than one server, but implementation requires some administration skills.
In traditional infrastructure environment, you may have to involve multiple teams and would take time to create NFS. But if you are using AWS, you can get it done in few minutes with their EFS (Elastic File System) service.
AWS EFS let you create a scalable file storage to be used on EC2. You don’t have to bother about capacity forecasting as it can scale up or down on-demand.
A quick diagram to give you an idea how it works.
AWS is fantastic. If you are new to it and interested in learning, I would recommend an excellent online course by A Cloud Guru.
Some of the EFS advantages are:
- Fully managed by AWS
- Low cost, pay for what you use
- High available & durable
- Automatically scale up or down
- Scalable performance
I’ve two EC2 Ubuntu instances running, and in this tutorial, I’ll create one EFS then mount it on both EC2 servers.
Let’s get it started.
- Login to AWS console
- Go to Services and select EFS under storage (direct link)
- Click “Create file system.”
- AWS will automatically assign an IP address in availability zone. If you need to change you can do it on next screen.
- Add the tag if you need to and select the performance mode between General purpose or Max I/O
- Review the configuration and if all okay then click “Create File System.”
It may take few seconds and once done; you will get a success message.
You have created a file system. You can mount your file system from an EC2 instance with an NFSv4.1 client installed. You can also mount your file system from an on-premises server over an AWS Direct Connect connection. Click here for EC2 mount instructions, and here for on-premises mount instructions.
You will be able to see newly created an elastic file system in the list.
This concludes you’ve created EFS and ready to be mounted on EC2 instances.
Mounting EFS on EC2
Before mounting, you need to install nfs client. If you expand the list and click on “Amazon EC2 mount instructions”, you will get the details.
But let’s see how it goes.
- Login to both EC2 instance and install nfs client. I am having Ubuntu, so I will use the following
apt-get install nfs-common
- Let’s create a folder where you want to mount the EFS.
For ex: /apps
cd / mkdir apps
Mount the file system with the command given in instructions.
mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 fs-4fd14a06.efs.us-east-1.amazonaws.com:/ apps
Note: If you are encountering any issues during mount then refer this troubleshooting guide and don’t forget to check the security groups to ensure the following.
- NFS port (2049) is allowed in EC2 instance inbound rules
- EC2 security groups are allowed in EFS security groups
It will take few seconds, and you will notice /apps is mounted if you do
df -h command
[email protected]:/# df -h | grep apps fs-4fd14a06.efs.us-east-1.amazonaws.com:/ 8.0E 0 8.0E 0% /apps [email protected]:/#
Now, you got to log in to another server where you want to have this /apps available and repeat creating a folder and mounting the EFS.
To verify, I mounted my EFS on another server and can see /apps are accessible on both servers.
[email protected]:/apps# df -h | grep apps fs-4fd14a06.efs.us-east-1.amazonaws.com:/ 8.0E 0 8.0E 0% /apps [email protected]:/apps#
This is easy, isn’t it?
I tried creating few files, and overall performance looks good. AWS EFS looks promising and if you are in need of file system sharing across EC2 instances then give a try, and I am sure you will like it.