# AWS CLI with LIBSAFE Go

AWS CLI is a unified tool to manage AWS services. It is frequently the tool used to transfer data in and out of AWS S3. It works with any S3 compatible cloud storage service and it is the recommended way to upload or download content when using LIBSAFE Go.

In this recipe we will learn how to configure and use AWS CLI to manage data with LIBSAFE Go.

## 1. Prerequisites <a href="#id-1-prerequisites" id="id-1-prerequisites"></a>

* A working LIBSAFE Go instance
* Your LIBSAFE Go S3 access and secret keys.

## 2. Installation <a href="#id-2-installation" id="id-2-installation"></a>

Install AWS CLI from [https://aws.amazon.com/cli/](https://aws.amazon.com/cli/)​

## 3. Configuration <a href="#id-3-configuration" id="id-3-configuration"></a>

To configure AWS CLI, type `aws configure` and specify the LIBSAFE Go key information.

Replace shown keys below with your own keys:

```
$ aws configure
AWS Access Key ID [None]: <your access key>
AWS Secret Access Key [None]: <your secret key>
Default region name [None]: (just press ENTER here for None)
Default output format [None]: (just press ENTER here for None)
```

## 4. Commands <a href="#id-4-commands" id="id-4-commands"></a>

Depending on the region and other settings, LIBSAFE Go keeps your data container inside a particular S3 Bucket. All data containers in your instance may use the same S3 bucket or not.

Path to your files is created **using the following convention:**

```
s3://{S3 bucket name}/{container id}/{path to your file}
```

To obtain the **Bucket Name** associated to the data container you want to use to begin uploading any file see [Getting your S3 bucket name](getting-your-s3-bucket-name).

### **List your containers** <a href="#list-your-containers" id="list-your-containers"></a>

This will list the data containers you have in a given S3 bucket:

```
$ aws s3 ls s3://flexibleIntakeAcme/
                           PRE 1/
                           PRE 2/
                           PRE 3/
                           PRE 4/
                           PRE 5/
                           PRE 6/
```

Note that the 1/, 2/, etc are your container IDs. Before the container ID, you can find a PRE or a date and time, depending on the case.

### List contents inside a container <a href="#list-contents-inside-a-container" id="list-contents-inside-a-container"></a>

```
$ aws s3 ls s3://libsafeGoAcme/5/
2021-02-30 00:26:53      69297 results.root
2021-02-30 00:35:37      67250 mycode-2.5.0.tar.gz
```

### ​ <a href="#undefined" id="undefined"></a>

### Copy files to your container <a href="#copy-files-to-your-container" id="copy-files-to-your-container"></a>

```
$ aws s3 cp 1.root s3://libsafeGoAcme/5/1.root
upload: .\1.root to s3://libsafeGoAcme/5/1.root
```

### ​ <a href="#undefined-1" id="undefined-1"></a>

### Up/download recursively <a href="#up-download-recursively" id="up-download-recursively"></a>

```
$ aws s3 cp myFolder s3://libsafeGoAcme/5/myfolder --recursive
upload: .\myfolder\1.root to s3://libsafeGoAcme/5/myfolder/1.root
upload: .\myfolder\2.root to s3://libsafeGoAcme/5/myfolder/2.root
```

### &#x20;<a href="#undefined-2" id="undefined-2"></a>

### ​Synchronize a local/remote folder <a href="#undefined-2" id="undefined-2"></a>

This will upload/download changed or new files only, and will not delete files not in source.

```
$ aws s3 sync myFolder s3://libsafeGoAcme/5/myfolder
upload: .\myfolder\3.root to s3://libsafeGoAcme/5/myfolder/3.root
```



### Delete files from your container <a href="#delete-files-from-your-container" id="delete-files-from-your-container"></a>

```
$ aws s3 rm s3://libsafeGoAcme/5/1.root
delete: s3://libsafeGoAcme/5/1.root
```

​
