How can I mount my Allas S3 bucket to a VM running in cPouta
Combining cPouta cloud environment and Allas storage environment allows you to build scalable data management environments. This document shows one example how you can combine these two services by mounting a bucket from Allas to an Ubuntu 22.04 (also tested with Ubuntu 20.04 and 18.04) or a Centos7 based virtual machine running in cPouta.
Installing OpenStack, s3cmd and s3fs
In Ubuntu 22.04 LTS (works for Ubuntu 20.04 and 18.04 as well)
-
After launching an Ubuntu based virtual machine in cPouta, open a terminal connection to the VM and update it with the command:
sudo apt update
Warning
Older versions of Ubuntu will have older and deprecated versions of python. It is recommended to use the latest Ubuntu version available in Pouta.
-
Then install OpenStack client by:
sudo apt install python3-pip python3-dev python3-setuptools sudo pip install --upgrade pip sudo pip install python-openstackclient
Info
For Ubuntu 18.04, type those commands:
sudo apt install python3-pip python3-dev python3-setuptools sudo pip3 install --upgrade pip sudo pip install python-openstackclient --ignore-installed PyYAML
If you omit
--ignore-installed PyYAML
, you will receive an error message:
It should be installed by distutils, so the removal process cannot confirm which files belong to it.Cannot uninstall 'PyYAML'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
-
Next, install s3cmd and s3fs commands to your VM.
sudo apt install s3cmd s3fs
In Centos7 (Maintenance Updates EOL 2024-06-30)
-
After launching a Centos7 based virtual machine in cPouta, open a terminal connection to the VM and update it with the command:
sudo yum update
-
OpenStack and s3cmd can then be installed by:
sudo yum install python3 python3-devel wget sudo python3 -m pip install --upgrade pip sudo python3 -m pip install python-openstackclient sudo yum install s3cmd
-
s3fs-fuse can be installed using this command:
sudo yum install s3fs-fuse
Configuring and using Allas
Use s3cmd to read and write files
Once you have openstack, s3cmd and s3fs installed, download and execute the poutaos_configure tool to configure s3cmd so that it uses your cPouta project. You can also use this tool to switch between different Allas projects if you have several of them.
wget https://a3s.fi/tools/poutaos_configure
chmod u+x poutaos_configure
./poutaos_configure
The poutaos_configure will first ask you for your CSC username and password, you can see which is your CSC username in your My CSC profile page, you csan also change your password there. Then it will list your Allas projects and ask you to fill up the project to be used. Finally it will ask you for the chunk size, it is recommended to leave the default.
After this you can use the storage area of your Allas project with s3cmd commands. Now you can see, download and upload files in this bucket with s3cmd.
- List all your buckets:
$ s3cmd ls s3://
2022-10-17 07:03 s3://data-europe
2020-09-17 11:12 s3://images-sky
2020-11-06 13:56 s3://case_1
- Let's assume you already have a bucket called case_1 in Allas and that you have some data objects (i.e. files) in this bucket.
$ s3cmd ls s3://case_1
2022-10-17 07:14 67213268 s3://case_1/file1.txt
- To retrieve the file:
s3cmd get s3://case_1/file1.txt
- To upload a new file:
s3cmd put file2.txt s3://case_1/
This is the recommended way to use Allas with the S3 protocol from the command line. However, it is also possible to mount the bucket to your VM so that it is shown as "mounted disk". You can use s3fs
for that.
Use s3fs to mount a folder into your VM
-
To do this, create first an empty directory (like os_case_1) to be used as a mount point:
mkdir os_case_1
Info
Any empty directory can be used as a mount point
-
Create a
.passwd-s3fs
file in your home directory. The format of the file must be:ACCESS_KEY_ID:SECRET_ACCESS_KEY
and have 600 permissions. (Your project must be sourced:source project_xxxxxxx
)$ openstack ec2 credentials list -f value | grep $OS_PROJECT_ID | tail -1 |\ awk '{print $1":"$2}' >.passwd-s3fs Password: $ chmod 600 .passwd-s3fs
-
then use the s3fs command to mount the bucket.
s3fs case_1 os_case_1 -o passwd_file=~/.passwd-s3fs -o url=https://a3s.fi/ \ -o use_path_request_style -o umask=0333,uid=$(id -u)
Info
The uid value returned by
id -u
should be 1000 for the default userInfo
The umask value
0333
mounts the files in read-only mode. If you want to mount them in read-write mode, use0027
instead -
And after this you should be able to see the objects of the mounted bucket as files. Try for example the command:
ls -l os_case_1
The output should be the same as with
s3cmd ls s3://case_1
Info
You can also check the mount by typing the command
df -h
-
When you are done you can unmount the folder by:
sudo umount os_case_1