- tocdepth
2
Использование Virtual-hosted-style в SDK
Существует две модели обращения к бакетам OBS:
Virtual-hosted-style
Path-style
Подробнее о каждой из них читайте в разделе Модели адресации в OBS.
Внимание
При работе с OBS используйте модель адресации Virtual-hosted-style.
Модель Path-style может вызвать снижение производительности и будет отключена в IV квартале 2024 года.
В этом разделе приведены примеры использования модели Virtual-hosted-style для работы с некоторыми библиотеками и CLI.
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())
MinIO
Чтобы при работе через MinIO использовать Virtual-hosted-style, задайте алиас с помощью команды:
mc alias set “alias” https://obs.ru-moscow-1.hc.sbercloud.ru “access_key” “secret_key” -path=off
для Dev & Test