Objective
The Swift s3api middleware providing S3 API compatibility has been enabled on all Public Cloud regions.
This guide will help you access objects in Swift using a software designed to interact with S3-compatible endpoints.
Requirements
Instructions
Set the OpenStack environment variables
user@host:~$ source <user_name>-openrc.sh
Please enter your OpenStack Password for project <project_name> as user <user_name>:
user@host:~$
Install OpenStack client if needed
user@host:~$ pip install python-openstackclient
user@host:~$
OpenStack client command reference here.
Create EC2 credentials
S3 tokens are different, you need 2 parameters (access and secret) to generate a S3 token.
These credentials will be safely stored in Keystone. To generate it:
With python-openstack client:
user@host:~$ openstack ec2 credentials create
+------------+----------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+----------------------------------------------------------------------------------------------------------------------------+
| access | 5a4d8b8d88104123a862c527ede5a3d3 |
| links | {u'self': u'https://auth.cloud.ovh.net/v3/users/d74d05ff121b44bea9216495e7f0df61/credentials/OS- |
| | EC2/5a4d8b8d88104123a862c527ede5a3d3'} |
| project_id | 20e124b71be141299e111ec26b1892fa |
| secret | 925d5fcfcd9f436d8ffcb20548cc53a2 |
| trust_id | None |
| user_id | d74d05ff121b44bea9216495e7f0df61 |
+------------+----------------------------------------------------------------------------------------------------------------------------+
With curl:
. openrc.sh
TMP_FILE=$(mktemp)
OS_USER_ID=$(curl -s -D $TMP_FILE -X POST "${OS_AUTH_URL}auth/tokens" -H "Content-Type: application/json" -d '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"'$OS_USERNAME'","domain":{"id":"default"},"password":"'$OS_PASSWORD'"}}},"scope":{"project":{ "id":"'$OS_TENANT_ID'","domain":{"id":"default"}}}}}' | jq -r '.["token"]["user"]["id"]')
OS_TOKEN=$(awk 'BEGIN{IGNORECASE=1} /^X-Subject-Token/ {print $2}' $TMP_FILE | tr -d "\r")
curl -s -X POST -H "Content-Type: application/json" -H "X-Auth-Token: $OS_TOKEN" -d '{"tenant_id": "'$OS_TENANT_ID'"}' "${OS_AUTH_URL}users/${OS_USER_ID}/credentials/OS-EC2" | jq .
{
"credential": {
"user_id": "d74d05ff121b44bea9216495e7f0df61",
"links": {
"self": "https://auth.cloud.ovh.net/v3/users/d74d05ff121b44bea9216495e7f0df61/credentials/OS-EC2/660c89cfc4764271ba169941c7b2f310"
},
"tenant_id": "20e124b71be141299e111ec26b1892fa",
"access": "660c89cfc4764271ba169941c7b2f310",
"secret": "fc9e8eb545724accadcfabbd99207df1",
"trust_id": null
}
}
You can either use the CLI method or create AWS configuration files manually.
Install the AWS client and configure it as follows:
user@host:~$ pip install awscli
user@host:~$ sudo apt install awscli
user@host:~$ sudo yum install awscli
user@host:~$ aws configure
Then, follow the steps and enter your AWS credentials generated by the commands above.
user@host:~$ cat ~/.aws/credentials
[default]
aws_access_key_id = <access_key>
aws_secret_access_key = <secret_key>
user@host:~$ cat ~/.aws/config
[plugins]
endpoint = awscli_plugin_endpoint
[default]
region = <region>
s3 =
endpoint_url = https://s3.<region>.cloud.ovh.net
signature_version = s3v4
s3api =
endpoint_url = https://s3.<region>.cloud.ovh.net
Virtual hosted-style and path-style access are supported in all regions, but we recommend to use virtual hosted-style since path-style access will be deprecated after September 30, 2020.
Use AWS client
List buckets (containers):
Info
If you have more than one profile, add --profile <profile> to the command line.
Create a new bucket:
user@host:~$ aws s3 mb s3://bucket
Info
S3 Buckets can only be created on PCS policy (Object Storage).
Info
The container name must respect the following rules.
- The bucket name can be between 3 and 63 characters long, and can contain only lower-case characters, numbers, periods, and dashes.
- Each bucket name must start with a lowercase letter or number.
- The bucket name cannot contain underscores, end with a dash, have consecutive periods, or use dashes adjacent to periods.
- The bucket name cannot be formatted as an IP address (198.51.100.24).
Upload a local file to Swift:
user@host:~$ aws s3 cp file.txt s3://bucket/file.txt
Download an object from Swift:
user@host:~$ aws s3 cp s3://bucket/file.txt file.txt
Delete a Swift object:
user@host:~$ aws s3 rm s3://bucket/file.txt
Delete a bucket:
user@host:~$ aws s3 rb s3://bucket
Go further
- OpenStack client command reference here
- S3 client command reference here
If you need training or technical assistance to implement our solutions, contact your sales representative or click on this link to get a quote and ask our Professional Services experts for assisting you on your specific use case of your project.
Join our community of users.