Использование Virtual-hosted-style в SDK

Существует две модели обращения к бакетам OBS:

  • Virtual-hosted-style

  • Path-style

Подробнее о каждой из них читайте в разделе Модели адресации в OBS.

Внимание

При работе с OBS не рекомендуется использовать модель Path-style. Планируется отказ от поддержки этой модели и переход к Virtual-hosted-style.

В этом разделе приведены примеры использования модели Virtual-hosted-style для работы с некоторыми библиотеками.

boto3

Чтобы настроить boto3 на использование Virtual-hosted-style, задайте параметр addressing_style (строка 15):

 1import boto3
 2from botocore.client import Config
 3
 4bucket = "mybucket"
 5endpoint = "https://obs.ru-moscow-1.hc.sbercloud.ru"
 6AK = "access-key"
 7SK = "secret-key"
 8
 9s3 = boto3.client(
10   service_name='s3',
11   aws_access_key_id=AK,
12   aws_secret_access_key=SK,
13   endpoint_url=endpoint,
14   verify = False,
15   config=Config(s3={'addressing_style': 'virtual'})
16)
17
18for key in s3.list_objects(Bucket=bucket)['Contents']:
19   print(key['Key'])

awswrangler

Чтобы настроить awswrangler на использование Virtual-hosted-style, задайте параметр addressing_style в конфигурации (строки 18–20):

 1import boto3
 2import awswrangler
 3import botocore.session
 4import botocore.config
 5from botocore.client import Config
 6
 7endpoint = "https://obs.ru-moscow-1.hc.sbercloud.ru"
 8AK = "access-key"
 9SK = "secret-key"
10
11boto3_session = boto3.Session(
12   region_name="ru-moscow-1",
13   aws_access_key_id=AK,
14   aws_secret_access_key=SK
15)
16
17awswrangler.config.s3_endpoint_url = "https://obs.ru-moscow-1.hc.sbercloud.ru"
18awswrangler.config.botocore_config = botocore.config.Config(
19   s3={"addressing_style": "virtual"}
20)
21awswrangler.s3.list_objects(path="s3://mybucket", boto3_session=boto3_session)

Apache Spark + s3a

При использовании Apache Spark и протокола s3a добавьте параметр fs.s3a.path.style.access в инициализацию сессии (строка 10):

 1from pyspark.sql import SparkSession
 2
 3if __name__ == "__main__":
 4   spark = SparkSession.builder \
 5           .appName('S3A') \
 6           .config("fs.s3a.access.key", 'access-key')  \
 7           .config("fs.s3a.secret.key", 'secret-key')  \
 8           .config("fs.s3a.impl","org.apache.hadoop.fs.s3a.S3AFileSystem")  \
 9           .config("fs.s3a.endpoint", "https://obs.ru-moscow-1.hc.sbercloud.ru")  \
10           .config("fs.s3a.path.style.access", "false") \
11           .getOrCreate()
12
13   df = spark.read.csv('s3a://mybucket/myobject.csv', header=True)
14   df.show(10,0)
15   spark.stop()

Apache Airflow

При работе с Apache Airflow параметры доступа настраиваются на уровне подключения aws_connection с помощью параметра config_kwargs:

1{
2   "region_name": "ru-moscow-1",
3   "endpoint_url": "https://obs.ru-moscow-1.hc.sbercloud.ru",
4   "config_kwargs": {
5      "s3": {
6         "addressing_style": "virtual"
7      }
8   }
9}

PyArrow

Для использования Virtual-hosted-style задайте параметр force_virtual_addressing:

 1from pyarrow import fs
 2import pyarrow.dataset as ds
 3import pyarrow.parquet as pq
 4
 5endpoint = "https://obs.ru-moscow-1.hc.sbercloud.ru"
 6AK = "access-key"
 7SK = "secret-key"
 8
 9s3 = fs.S3FileSystem(
10   access_key=AK,
11   secret_key=SK,
12   region="ru-moscow",
13   endpoint_override="https://obs.ru-moscow-1.hc.sbercloud.ru",
14   force_virtual_addressing=True
15)
16
17dataset = ds.dataset("bucket-obs/BigData/Dataset/Parquet", format="parquet", filesystem=s3)
18print(dataset.to_table())

s3fs + PyArrow

При работе с PyArrow + s3fs нужно добавить параметр в конструктор файловой системы (строка 12):

 1import s3fs
 2import pyarrow.dataset as ds
 3
 4endpoint = "https://obs.ru-moscow-1.hc.sbercloud.ru"
 5AK = "access-key"
 6SK = "secret-key"
 7
 8s3_fs = s3fs.S3FileSystem(
 9   key=AK,
10   secret=SK,
11   endpoint_url=endpoint,
12   config_kwargs={'s3': {'addressing_style': 'virtual'}}
13)
14
15dataset = ds.dataset("bucket-obs/BigData/Dataset/Parquet", format="parquet", filesystem=s3_fs)
16print(dataset.to_table())
Запустили Evolution free tier
для Dev & Test
Получить