Опитвам се да напиша скрипт на Python за основни операции get/put/delete/list на 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-скриптът се изпълнява вътре в контейнер и същия pod, който изпълнява s3 контейнер. Следователно IP е достъпен от един контейнер в друг. Как трябва да реша този проблем?
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