# Access Storage with AWS S3 SDKs

## Introduction

Flow Object Storage is an S3-compatible object storage service that lets you store and serve large amounts of data.&#x20;

The Flow Object Storage API is inter-operable with the AWS S3 API, meaning you can use existing S3 tools and libraries with Spaces. A common use case is managing Flow Object Storage programmatically with AWS’ S3 SDKs.

## Install the SDK

Install the AWS SDK using the package manager for your language of choice.

{% tabs %}
{% tab title="Java Script" %}
```
npm install aws-sdk
```
{% endtab %}

{% tab title="Go" %}
```
go get -u github.com/aws/aws-sdk-go
```
{% endtab %}

{% tab title="PHP" %}
```
php composer.phar require aws/aws-sdk-php
```
{% endtab %}

{% tab title="Python" %}
```
pip install boto3
```
{% endtab %}

{% tab title="Ruby" %}
```
gem install aws-sdk-s3
```
{% endtab %}
{% endtabs %}

## Obtain Access & Secret Keys

You are able to retrieve the access & secret keys in our customer portal:\
[https://my.flow.swiss/#/object-storage](https://my.flow.swiss/#/object-storage)

The examples below rely on environment variables to access these keys. Export `ACCESS_KEY` and `SECRET_KEY` to your environment (e.g. `export ACCESS_KEY=DSJE2334JAS`) to make them available to your code.

## SDKs

After you set up and configure an SDK, you can follow the examples below to see how to perform common Flow Object Storage operations in JavaScript, Go, PHP, Python and Ruby.

{% tabs %}
{% tab title="Java Script" %}
```
const AWS = require('aws-sdk');
const fs = require('fs'); // Needed for example below

const spacesEndpoint = new AWS.Endpoint('<S3-ENDPOINT>');
const s3 = new AWS.S3({
    endpoint: spacesEndpoint,
    accessKeyId: process.env.ACCESS_KEY,
    secretAccessKey: process.env.SECRET_KEY
});
```
{% endtab %}

{% tab title="Go" %}
```
package main

import (
    "os"
    // Additional imports needed for examples below
    "fmt"
    "io"
    "strings"
    "time"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/credentials"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
)

func main() {
    key := os.Getenv("ACCESS_KEY")
    secret := os.Getenv("SECRET_KEY")

    s3Config := &aws.Config{
        Credentials: credentials.NewStaticCredentials(key, secret, ""),
        Endpoint:    aws.String("https://<ENDPOINT>"),
        Region:      aws.String("us-east-1"),
    }

    newSession := session.New(s3Config)
    s3Client := s3.New(newSession)

    // ...
```
{% endtab %}

{% tab title="PHP" %}
{% hint style="info" %}
This SDK requires the `region` to be `us-east-1`, an AWS region name, to successfully create a new Bucket. The Flow Object Storage datacenter region is based on the \
\<ENDPOINT> value.
{% endhint %}

```
<?php

// Included aws/aws-sdk-php via Composer's autoloader
require 'vendor/autoload.php';
use Aws\S3\S3Client;

$client = new Aws\S3\S3Client([
        'version' => 'latest',
        'region'  => 'us-east-1',
        'endpoint' => 'https://<ENDPOINT>',
        'credentials' => [
                'key'    => getenv('ACCESS_KEY'),
                'secret' => getenv('SECRET_KEY'),
            ],
]);
```
{% endtab %}

{% tab title="Python 3" %}
```
import os
import boto3

session = boto3.session.Session()
client = session.client('s3',
                        region_name='nyc3',
                        endpoint_url='https://<ENDPOINT>',
                        aws_access_key_id=os.getenv('ACCESS_KEY'),
                        aws_secret_access_key=os.getenv('SECRET_KEY'))
```
{% endtab %}

{% tab title="Ruby" %}
```
require 'aws-sdk-s3'

client = Aws::S3::Client.new(
  access_key_id: ENV['ACCESS_KEY'],
  secret_access_key: ENV['SECRET_KEY'],
  endpoint: 'https://<ENDPOINT>',
  region: 'us-east-1'
)
```
{% endtab %}
{% endtabs %}

{% hint style="info" %}
Please replace the \<ENDPOINT> place holder with the correct endpoint:\
\
**Location ALP1:** os.alp1.flow.swiss\
**Location ZRH1:** os.zrh1.flow.swiss
{% endhint %}
