Я пытаюсь написать скрипт python для основных операций получения/помещения/удаления/списка на S3. Я использую облачное хранилище объектов S3, а не AWS. Чтобы установить ресурс boto3, я установил конечную точку и ключи следующим образом:
URL = 'http://ip:80'
s3_resource = boto3.resource ('s3', endpoint_url=URL,
aws_access_key_id = ACCESS_KEY,
aws_secret_access_key = SECRET_KEY,
region_name='region1')
Я создал несколько тестовых корзин ВРУЧНУЮ со следующими именами, которые соответствуют допустимым ограничениям имен корзин S3:
- тестовое ведро-0
- тестовое ведро-1
- ведро для образцов
- тестбакет
Однако, когда я пытаюсь создать ведро из кода Python, я неоднократно получаю следующую ошибку:
# >>> client.list_buckets()
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# File "/usr/local/lib/python3.8/site-packages/botocore/client.py", line 357, in _api_call
# return self._make_api_call(operation_name, kwargs)
# File "/usr/local/lib/python3.8/site-packages/botocore/client.py", line 676, in _make_api_call
# raise error_class(parsed_response, operation_name)
# botocore.exceptions.ClientError: An error occurred (InvalidBucketName) when calling the ListBuckets operation: The specified bucket is not valid.
Будучи очень новичком в boto3, я действительно не уверен, чего ожидает boto3. Я пробовал различные комбинации для создания соединений со службой S3, например, используя client
вместо resource
, но проблема постоянна.
Несколько других соединений S3, которые я пробовал, следующие:
s3 = boto3.resource('s3',
endpoint_url='http://10.43.235.193:80',
aws_access_key_id = 'aaa',
aws_secret_access_key = 'sss',
config=Config(signature_version='s3v4'),
region_name='region1')
conn = boto3.connect_s3(
aws_access_key_id = 'aaa',
aws_secret_access_key = 'sss',
host = '10.43.235.193',
port = 80,
is_secure = False,
)
from boto3.session import Session
session = Session(
aws_access_key_id='aaa',
aws_secret_access_key='sss',
region_name='region1'
)
s3 = session.resource('s3')
client = session.client('s3', endpoint_url='http://10.43.235.193:80') # s3-region1.example.com
s3_client = boto3.client ('s3',
endpoint_url=s3_endpoint,
aws_access_key_id = 'aaa',
aws_secret_access_key = 'sss',
region_name='region1')
Python-скрипт работает внутри контейнера и того же модуля, который запускает контейнер s3. Поэтому IP доступен из 1 контейнера в другой. Как мне решить эту проблему?
aws configure
, а не помещать их в свой код. - person John Rotenstein   schedule 12.04.202110.
? Это частный IP-адрес, доступный только внутри сети. Это адрес вашего сервера Cloudian в вашей сети? - person John Rotenstein   schedule 12.04.202110.
, потому что он работает в кластере kubernetes. поэтому клиентское приложение, работающее в 1 контейнере, может общаться со службой s3, работающей в другом контейнере. - person Aniruddha Tekade   schedule 12.04.2021