# Python SDK (boto)

## boto3 and boto

[boto3](https://github.com/boto/boto3) and [boto](https://github.com/boto/boto) are development kits (SDKs) for the Python 2.x and 3.x programming languages. SDKs are designed to work with AWS services.

### Preparation for work <a href="#before-you-begin" id="before-you-begin"></a>

1. Create a service account .
2. Assign a role to a service account .
3. Create a static access key .

### Installation <a href="#installation" id="installation"></a>

To install boto, follow the instructions in the developer's repository: [boto3](https://github.com/boto/boto3/blob/develop/README.rst#quick-start) , [boto](https://github.com/boto/boto#installation) .

### Customization <a href="#setup" id="setup"></a>

To configure, create configuration files in your home directory and specify in them:

* Static key in file `.aws/credentials`:

  ```
  [default]
              aws_access_key_id = <id>
              aws_secret_access_key = <secretKey>
  ```
* Default region in file `.aws/config`:

  ```
  [default]
              region=us-east-1
  ```

Use the address to access Object Storage `s3.coldstack.io`.

### Example <a href="#boto-example" id="boto-example"></a>

{% tabs %}
{% tab title="boto3" %}

```python
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import boto3
session = boto3.session.Session()
s3 = session.client(
    service_name='s3',
    endpoint_url='https://s3.coldstack.io'
)

# Uploading objects to the bucket

## From a string
s3.put_object(Bucket='bucket-name', Key='object_name', Body='TEST', StorageClass='COLD')

## From a file
s3.upload_file('this_script.py', 'bucket-name', 'py_script.py')
s3.upload_file('this_script.py', 'bucket-name', 'script/py_script.py')

# Get a list of objects in bucket
for key in s3.list_objects(Bucket='bucket-name')['Contents']:
    print(key['Key'])

# Download an object and print the contents to the console
get_object_response = s3.get_object(Bucket='bucket-name',Key='py_script.py')
print(get_object_response['Body'].read())
```

{% endtab %}

{% tab title="boto" %}

```python
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import os
from boto.s3.key import Key
from boto.s3.connection import S3Connection
os.environ['S3_USE_SIGV4'] = 'True'
conn = S3Connection(
    host='s3.coldstack.io'
)
conn.auth_region_name = 'us-east-1'

# Создать новый бакет
conn.create_bucket('bucket-name')
bucket = conn.get_bucket('bucket-name')

# Загрузить объекты в бакет

## Из строки
bucket.new_key('test-string').set_contents_from_string('TEST')

## Из файла
file_key_1 = Key(bucket)
file_key_1.key = 'py_script.py'
file_key_1.set_contents_from_filename('this_script.py')
file_key_2 = Key(bucket)
file_key_2.key = 'script/py_script.py'
file_key_2.set_contents_from_filename('this_script.py')

# Получить список объектов в бакете
keys_list=bucket.list()
for key in keys_list:
    print key.key

# Удалить несколько объектов
response = bucket.delete_keys(['test-string', 'py_script.py'])

# Получить объект
key = bucket.get_key('script/py_script.py')
print key.get_contents_as_string()
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.coldstack.io/tools/supported-tools/sdk/python-sdk-boto.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
