Skip to main content
  • »
  • S3 »
  • Jak uzyskać dostęp do Object Storage na NSIS Cloud za pomocą boto3

Jak uzyskać dostęp do Object Storage na NSIS Cloud za pomocą boto3

W tym artykule dowiesz się, jak uzyskać dostęp do Object Storage na NSIS Cloud przy użyciu biblioteki Python boto3.

Zakres artykułu

Wymagania wstępne

Nr 1 Konto

Musisz posiadać konto hostingowe na NSIS Cloud z dostępem do interfejsu Horizon: https://horizon.cloudferro.com/.

Nr 2 Wygenerowane dane uwierzytelniające EC2

Musisz wygenerować dane uwierzytelniające EC2. Więcej informacji znajdziesz tutaj: Jak wygenerować poświadczenia EC2 i zarządzać nimi na NSIS Cloud

Nr 3 Komputer lub maszyna wirtualna z Linuxem lub Windowsem

Artykuł został przygotowany dla systemów Ubuntu 22.04 oraz Windows Server 2022. Inne systemy operacyjne mogą działać poprawnie, ale nie są objęte zakresem tego artykułu i mogą wymagać dostosowania podanych poleceń.

Z artykułu możesz korzystać zarówno na maszynach wirtualnych z Linuxem lub Windowsem, jak i na komputerze lokalnym z jednym z tych systemów.

Aby utworzyć nową maszynę wirtualną hostowaną w chmurze NSIS Cloud, pomocne mogą być następujące artykuły:

Nr 4 Dodatkowe biblioteki Pythona

Poniżej opisano, jak zainstalować Python 3 oraz bibliotekę boto3 w systemach Ubuntu i Windows.

Ubuntu 22.04: użycie virtualenvwrapper i pip

W Pythonie zazwyczaj korzysta się ze środowisk wirtualnych, opisanych w artykule: Jak zainstalować Python virtualenv lub virtualenvwrapper na NSIS Cloud.

Jeśli Twoje środowisko nazywa się managing-files, możesz wejść do niego poleceniem workon, a następnie zainstalować boto3:

workon managing-files
pip3 install boto3

Ubuntu 22.04: użycie apt

Jeśli nie potrzebujesz środowiska wirtualnego i chcesz zainstalować boto3 globalnie, możesz użyć apt. Poniższe polecenie zainstaluje zarówno Python 3, jak i bibliotekę boto3:

sudo apt install python3 python3-boto3

Windows Server 2022

Jeśli korzystasz z systemu Windows, zapoznaj się z tym artykułem: Jak zainstalować Boto3 w Windows na NSIS

Terminologia: kontenery a buckety

Istnieją dwa interfejsy Object Storage:

  • Swift / Horizon – interfejs Horizon korzysta z API Swift, w którym najwyższy poziom przestrzeni nazw nazywany jest kontenerem.

  • S3 / boto3 – endpoint zgodny z S3 (używany przez boto3 oraz inne narzędzia S3) wykorzystuje buckety jako najwyższy poziom przestrzeni nazw.

Z technicznego punktu widzenia kontenery i buckety pełnią podobną rolę koncepcyjną (oba są najwyższym poziomem przestrzeni nazw w Object Storage), jednak nie są tym samym zasobem i są zarządzane za pomocą różnych interfejsów API.

Kontener utworzony w interfejsie Horizon nie pojawi się automatycznie jako bucket S3 dla boto3, a bucket utworzony przy użyciu boto3 nie będzie widoczny jako kontener w Horizon.

W tym artykule stosujemy następującą terminologię:

  • bucket – gdy mówimy o S3 i bibliotece boto3,

  • kontener – gdy odnosimy się do obiektów Swift widocznych w Horizon.

Jak korzystać z udostępnionych przykładów?

Każdy z przedstawionych przykładów może służyć jako samodzielny fragment kodu. Powinieneś być w stanie:

  • wpisać kod w edytorze tekstu,

  • zdefiniować odpowiednie wartości zmiennych,

  • zapisać go jako plik oraz

  • uruchomić.

Możesz również traktować te przykłady jako punkt wyjścia do tworzenia własnych skryptów.

Informacja

W wielu przykładach używamy nazw bucketów boto3 lub boto3_11_12_2025_09_31 jako nazw przykładowych.

Jeśli nie posiadasz bucketów o takich nazwach, masz dwie możliwości:

  • utworzyć bucket o jednej z tych nazw (zob. Tworzenie bucketa), lub

  • zastąpić nazwy przykładowe nazwą dowolnego istniejącego bucketa, wyświetloną w przykładzie Listowanie bucketów.

Każdy przykład kodu składa się z trzech części:

../_images/code_structure1.png
niebieski prostokąt Import wymaganych bibliotek

Standardową praktyką w Pythonie jest importowanie wszystkich bibliotek, które będą później wykorzystywane w kodzie. W tym przypadku importowana jest biblioteka boto3, a czasami również inne biblioteki, jeśli są potrzebne.

czerwony prostokąt Definicja parametrów wejściowych

Typowe wywołanie biblioteki boto3 wygląda następująco:

s3 = boto3.resource(
    "s3",
    aws_access_key_id=access_key,
    aws_secret_access_key=secret_key,
    endpoint_url=endpoint_url,
    region_name=region_name,
)
zielony prostokąt Wywołanie boto3

Większość kodu przygotowawczego pozostaje taka sama w kolejnych plikach. Ta ostatnia część to miejsce, w którym wykonywane są konkretne operacje. Czasami będzie to jedna linia kodu, a czasami kilka, często w postaci pętli.

Definicja parametrów i konfiguracja połączenia

W większości przykładów używanych w tym artykule wywołania biblioteki boto3 mają bardzo podobną strukturę. Różnice pomiędzy nimi wynikają głównie z wykonywanej operacji, a nie ze sposobu konfiguracji połączenia.

Poniżej omówiono zmienne, które muszą być zdefiniowane przed uruchomieniem przykładów.

Dla każdego wywołania wymagane są następujące zmienne:

  • aws_access_key_id – wartość z Wymagań wstępnych Nr 2

  • aws_secret_access_key – wartość z Wymagań wstępnych Nr 2

  • endpoint_url – s3.waw4-1.cloudferro.com

  • region_name – WAW4-1

Inne zmienne mogą być wymagane w zależności od przypadku użycia, na przykład:

  • bucket_name

  • path

Upewnij się, że wszystkie wymagane zmienne zostały poprawnie zdefiniowane przed uruchomieniem przykładów.

Uruchamianie kodu Python

Po uzupełnieniu wszystkich wartości zapisz plik z rozszerzeniem .py.

Jednym ze sposobów uruchamiania skryptów Python jest użycie wiersza poleceń. Najpierw przejdź do katalogu, w którym znajduje się plik, a następnie wykonaj polecenie (pamiętaj, aby zastąpić script.py właściwą nazwą pliku):

python3 script.py

Upewnij się, że nazwa pliku oraz jego ścieżka zostały przekazane poprawnie. Zwróć szczególną uwagę na spacje oraz inne znaki specjalne.

Ważne

W przedstawionych przykładach, nawet w przypadku potencjalnie destrukcyjnych operacji, nie zostaniesz poproszony o potwierdzenie.

Jeżeli skrypt zapisuje plik, a plik o tej samej nazwie już istnieje w podanej lokalizacji, zostanie on nadpisany.

We wszystkich kolejnych przykładach zakładamy, że odpowiednie buckety oraz obiekty już istnieją, o ile nie zaznaczono inaczej.

Tworzenie bucketa

Aby utworzyć nowy bucket, najpierw wybierz nazwę i przypisz ją do zmiennej bucket_name. W chmurze NSIS Cloud używaj wyłącznie liter, cyfr oraz myślników.

W dalszej części artykułu często używamy nazw boto3 lub boto3_11_12_2025_09_31 jako przykładowych nazw bucketów. Możesz:

  • utworzyć bucket o jednej z tych nazw i używać go we wszystkich przykładach, lub

  • wybrać dowolną inną poprawną nazwę bucketa i stosować ją konsekwentnie w kodzie.

boto3_create_bucket.py

import boto3

access_key = ""
secret_key = ""

bucket_name = "boto3"
endpoint_url = "https://s3.waw4-1.cloudferro.com"
region_name = "WAW4-1"

try:
    s3 = boto3.resource(
        "s3",
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        endpoint_url=endpoint_url,
        region_name=region_name,
    )

    s3.Bucket(bucket_name).create()

except Exception as issue:
    print("Wystąpił następujący błąd:")
    print(issue)

Pomyślne wykonanie tego kodu nie powinno zwrócić żadnego wyjścia.

Aby sprawdzić, czy bucket został utworzony, możesz między innymi wyświetlić listę bucketów, jak opisano w sekcji Listowanie bucketów poniżej.

Rozwiązywanie problemów podczas tworzenia bucketa

Bucket już istnieje

Jeżeli otrzymasz następujący komunikat:

The following error occurred:
An error occurred (BucketAlreadyExists) when calling the CreateBucket operation: Unknown

oznacza to, że nie możesz użyć tej nazwy, ponieważ bucket o takiej nazwie już istnieje. Wybierz inną nazwę i spróbuj ponownie.

Nieprawidłowe znaki w nazwie

Jeżeli użyjesz niedozwolonych znaków w nazwie bucketa, powinien pojawić się błąd podobny do poniższego:

Invalid bucket name "this bucket should not exist": Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$" or be an ARN matching the regex "^arn:(aws).*:(s3|s3-object-lambda):[a-z\-0-9]*:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\-.]{1,63}$|^arn:(aws).*:s3-outposts:[a-z\-0-9]+:[0-9]{12}:outpost[/:][a-zA-Z0-9\-]{1,63}[/:]accesspoint[/:][a-zA-Z0-9\-]{1,63}$"

Aby rozwiązać ten problem, wybierz inną nazwę bucketa — w chmurze NSIS Cloud używaj wyłącznie liter, cyfr oraz myślników.

Listowanie bucketów

Ten przykład umożliwia wyświetlenie listy bucketów widocznych dla Twoich danych uwierzytelniających EC2.

boto3_list_buckets.py

import boto3

access_key = ""
secret_key = ""

endpoint_url = "https://s3.waw4-1.cloudferro.com"
region_name = "WAW4-1"

try:
    s3 = boto3.client(
        "s3",
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        endpoint_url=endpoint_url,
        region_name=region_name,
    )

    print(s3.list_buckets()["Buckets"])

except Exception as issue:
    print("Wystąpił następujący błąd:")
    print(issue)

Wynikiem powinna być lista słowników, z których każdy zawiera informacje o danym buckecie, zaczynając od jego nazwy.

Jeżeli istnieją już dwa buckety, na przykład my-files oraz my-other-files, wynik może wyglądać następująco:

[{'Name': 'boto3', 'CreationDate': datetime.datetime(2025, 4, 30, 8, 52, 30, 658000, tzinfo=tzutc())},
 {'Name': 'mapsrv', 'CreationDate': datetime.datetime(2025, 1, 7, 12, 43, 50, 522000, tzinfo=tzutc())},
 {'Name': 'mapsrv-rasters', 'CreationDate': datetime.datetime(2025, 1, 7, 12, 44, 23, 39000, tzinfo=tzutc())}]

Aby uprościć wynik, możesz użyć pętli for i wyświetlić tylko nazwy bucketów, po jednym w każdej linii:

boto3_list_one_by_one.py

import boto3

access_key = ""
secret_key = ""

endpoint_url = "https://s3.waw4-1.cloudferro.com"
region_name = "WAW4-1"

try:
    s3 = boto3.client(
        "s3",
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        endpoint_url=endpoint_url,
        region_name=region_name,
    )

    for bucket in s3.list_buckets()["Buckets"]:
        print(bucket["Name"])

except Exception as issue:
    print("Wystąpił następujący błąd:")
    print(issue)

Przykładowy wynik działania tego kodu może wyglądać następująco:

boto3
mapsrv
mapsrv-rasters

Jeżeli nie posiadasz żadnych bucketów, wynik będzie pusty.

Sprawdzanie daty utworzenia bucketa

Poniższy przykład umożliwia sprawdzenie daty, w której dany bucket został utworzony. Wprowadź nazwę bucketa do zmiennej bucket_name.

boto3_check_date.py

import boto3

access_key = ""
secret_key = ""

bucket_name = "boto3"
endpoint_url = "https://s3.waw4-1.cloudferro.com"
region_name = "WAW4-1"

try:
    s3 = boto3.resource(
        "s3",
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        endpoint_url=endpoint_url,
        region_name=region_name,
    )

    print(s3.Bucket(bucket_name).creation_date)

except Exception as issue:
    print("Wystąpił następujący błąd:")
    print(issue)

Wynik powinien zawierać datę utworzenia bucketa w formacie obiektu datetime w Pythonie:

2024-01-23 14:21:03.070000+00:00

Listowanie plików w buckecie

Aby wyświetlić pliki znajdujące się w buckecie, podaj jego nazwę w zmiennej bucket_name.

boto3_list_files_in_bucket.py

import boto3

access_key = ""
secret_key = ""

bucket_name = "boto3"
endpoint_url = "https://s3.waw4-1.cloudferro.com"
region_name = "WAW4-1"

try:
    s3 = boto3.resource(
        "s3",
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        endpoint_url=endpoint_url,
        region_name=region_name,
    )

    bucket = s3.Bucket(bucket_name)
    for obj in bucket.objects.filter():
        print(obj)

except Exception as issue:
    print("Wystąpił następujący błąd:")
    print(issue)

Wynik powinien zawierać listę Twoich plików, na przykład:

s3.ObjectSummary(bucket_name='my-files', key='some-directory/')
s3.ObjectSummary(bucket_name='my-files', key='some-directory/another-file.txt')
s3.ObjectSummary(bucket_name='my-files', key='some-directory/first-file.txt')
s3.ObjectSummary(bucket_name='my-files', key='some-directory/some-other-directory/')
s3.ObjectSummary(bucket_name='my-files', key='some-directory/some-other-directory/some-other-file.txt')
s3.ObjectSummary(bucket_name='my-files', key='some-directory/some-other-directory/yet-another-file.txt')
s3.ObjectSummary(bucket_name='my-files', key='text-file.txt')

Jeżeli w buckecie nie ma żadnych plików, wynik będzie pusty.

Rozwiązywanie problemów z listowaniem plików w buckecie

Brak dostępu do bucketa

Jeżeli para kluczy nie ma dostępu do wybranego bucketa, powinien pojawić się błąd podobny do:

botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the ListObjects operation: Unknown

W takim przypadku wybierz inny bucket lub inną parę kluczy, jeśli posiadasz taką, która ma dostęp do tego bucketa.

Bucket nie istnieje

Jeżeli wybrany bucket nie istnieje, błąd może wyglądać następująco:

botocore.errorfactory.NoSuchBucket: An error occurred (NoSuchBucket) when calling the ListObjects operation: Unknown

Jeżeli potrzebujesz bucketa o takiej nazwie, spróbuj go utworzyć zgodnie z instrukcją w sekcji Tworzenie bucketa powyżej.

Listowanie plików z konkretnej ścieżki w buckecie

Ten przykład wyświetla tylko obiekty znajdujące się w określonej ścieżce.

Dla zmiennej path obowiązują dwie zasady:

  • ścieżka musi kończyć się ukośnikiem,

  • ścieżka nie może zaczynać się ukośnikiem.

Jak zwykle, w zmiennej bucket_name podaj nazwę bucketa.

boto3_list_files_from_path.py

import boto3

access_key = ""
secret_key = ""

bucket_name = "boto3"
endpoint_url = "https://s3.waw4-1.cloudferro.com"
region_name = "WAW4-1"
path = "some-directory/"

try:
    s3 = boto3.resource(
        "s3",
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        endpoint_url=endpoint_url,
        region_name=region_name,
    )

    bucket = s3.Bucket(bucket_name)
    for obj in bucket.objects.filter(Prefix=path):
        print(obj)

except Exception as issue:
    print("Wystąpił następujący błąd:")
    print(issue)

Standardowo powinien pojawić się wynik analogiczny do listowania wszystkich obiektów, jednak jeżeli w wybranej ścieżce nie ma plików, wynik będzie pusty.

Wysyłanie pliku do bucketa

Aby wysłać plik do bucketa, uzupełnij poniższe zmienne:

Nazwa zmiennej

Co powinna zawierać

bucket_name

Nazwa bucketa, do którego chcesz wysłać plik.

source_file

Lokalizacja pliku w Twoim lokalnym systemie plików.

destination_file

Ścieżka w buckecie, pod którą chcesz wysłać plik. Powinna zawierać tylko litery, cyfry, myślniki i ukośniki.

Dla zmiennej destination_file obowiązują dwa zastrzeżenia:

  1. Zakończ ją nazwą pliku, który wysyłasz, oraz

  2. Nie zaczynaj ani nie kończ jej ukośnikiem.

Bucket musi już istnieć i być widoczny dla Twoich danych uwierzytelniających EC2. Możesz to zweryfikować, wyświetlając listę bucketów zgodnie z wcześniejszymi przykładami.

Poniżej znajduje się kod:

boto3_upload_files.py

#!/usr/bin/env python3

import boto3

access_key = ""
secret_key = ""

bucket_name = "boto3_11_12_2025_09_31"  # zamień na nazwę swojego bucketa
endpoint_url = "https://s3.waw4-1.cloudferro.com"
region_name = "WAW4-1"

source_file = "onefile_11_12_2025_09_45.txt"
destination_file = "onefile_11_12_2025_09_45.txt"  # nie zaczynaj od ukośnika

try:
    s3 = boto3.client(
        "s3",
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        endpoint_url=endpoint_url,
        region_name=region_name,
    )

    # Wyślij plik
    s3.upload_file(source_file, bucket_name, destination_file)
    print(f"Wysłano {source_file} do s3://{bucket_name}/{destination_file}")

except Exception as issue:
    print("Wystąpił następujący błąd:")
    print(issue)

Ten skrypt wysyła plik onefile_11_12_2025_09_45.txt z lokalnego katalogu do bucketa o nazwie boto3_11_12_2025_09_31; wysłany plik będzie również nazywał się onefile_11_12_2025_09_45.txt. Przykładowy wynik w Terminalu może wyglądać następująco:

Wysyłanie pliku do bucketa S3 przy użyciu boto3

Wysyłanie pliku do bucketa S3 przy użyciu boto3

Kod można łatwo dostosować do innych scenariuszy. Na przykład możesz:

  • opakować logikę wysyłania w funkcję i wywoływać ją w innych skryptach,

  • dodać ponowienia (retries) lub bardziej szczegółową obsługę błędów,

  • wysyłać wiele plików w pętli, lub

  • zapisywać informację o sukcesie lub niepowodzeniu do pliku logu.

Wszystkie te elementy są poza zakresem tego artykułu, ale można je zbudować na bazie tego samego wzorca.

Rozwiązywanie problemów z wysyłaniem pliku do bucketa

Plik, który chcesz wysłać, nie istnieje

Jeżeli w zmiennej source_file podasz nieistniejący plik, powinien pojawić się błąd podobny do:

The following error occurred:
[Errno 2] No such file or directory: 'here/wrong-file.txt'

Aby rozwiązać problem, podaj poprawną nazwę/ścieżkę pliku i spróbuj ponownie.

Bucket nie istnieje lub nie jest dostępny

Jeżeli bucket nie istnieje lub Twoja para kluczy nie ma do niego dostępu, boto3 zwykle zwróci błąd AccessDenied lub NoSuchBucket. W takim przypadku:

  • wybierz inny bucket, który pojawia się na liście bucketów, lub

  • utwórz nowy bucket i ponów wysyłanie.

Pobieranie pliku z bucketa

Aby zapisać plik z bucketa na lokalnym dysku, uzupełnij wartości następujących zmiennych i uruchom poniższy kod:

Nazwa zmiennej

Co powinna zawierać

bucket_name

Nazwa bucketa, z którego chcesz pobrać plik.

source_key

Ścieżka w buckecie, z której chcesz pobrać plik.

destination_path

Ścieżka w lokalnym systemie plików, pod którą chcesz zapisać plik.

Nie zaczynaj ani nie kończ zmiennej source_key ukośnikiem.

boto3_download_file.py

import boto3

access_key = ""
secret_key = ""

bucket_name = "boto3_11_12_2025_09_31"
endpoint_url = "https://s3.waw4-1.cloudferro.com"
region_name = "WAW4-1"
source_key = "onefile_11_12_2025_09_45.txt"
destination_path = "onefile2.txt"

try:
    s3 = boto3.resource(
        "s3",
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        endpoint_url=endpoint_url,
        region_name=region_name,
    )

    bucket = s3.Bucket(bucket_name)
    bucket.download_file(source_key, destination_path)

except Exception as issue:
    print("Wystąpił następujący błąd:")
    print(issue)

Pomyślne wykonanie tego kodu nie powinno zwrócić żadnej odpowiedzi.

Rozwiązywanie problemów z pobieraniem pliku z bucketa

Plik nie istnieje w buckecie

Jeżeli wskazany plik nie istnieje w buckecie, powinien pojawić się następujący błąd:

The following error occurred:
An error occurred (404) when calling the HeadObject operation: Not Found

Aby rozwiązać problem, upewnij się, że w pierwszej kolejności został wskazany właściwy plik.

Usuwanie pliku z bucketa

Aby usunąć plik z bucketa, przypisz nazwę bucketa do zmiennej bucket_name oraz pełną ścieżkę pliku do zmiennej path.

Zmienna path jest pełnym kluczem obiektu w buckecie (często określanym jako object key w terminologii S3).

boto3_remove_file_from_bucket.py

import boto3

access_key = ""
secret_key = ""

bucket_name = "boto3_11_12_2025_09_31"
endpoint_url = "https://s3.waw4-1.cloudferro.com"
region_name = "WAW4-1"
path = "onefile_11_12_2025_09_45.txt"

try:
    s3 = boto3.resource(
        "s3",
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        endpoint_url=endpoint_url,
        region_name=region_name,
    )

    s3.Object(bucket_name, path).delete()

except Exception as issue:
    print("Wystąpił następujący błąd:")
    print(issue)

Pomyślne wykonanie tego kodu nie powinno zwrócić żadnej odpowiedzi.

Usuwanie bucketa

Aby usunąć bucket, najpierw usuń wszystkie obiekty, które się w nim znajdują. Gdy bucket będzie pusty, przypisz jego nazwę do zmiennej bucket_name i uruchom poniższy kod:

boto3_remove_bucket.py

import boto3

access_key = ""
secret_key = ""

bucket_name = "boto3_11_12_2025_09_31"
endpoint_url = "https://s3.waw4-1.cloudferro.com"
region_name = "WAW4-1"

try:
    s3 = boto3.resource(
        "s3",
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        endpoint_url=endpoint_url,
        region_name=region_name,
    )

    s3.Bucket(bucket_name).delete()

except Exception as issue:
    print("Wystąpił następujący błąd:")
    print(issue)

Pomyślne wykonanie tego kodu nie powinno zwrócić żadnej odpowiedzi.

Rozwiązywanie problemów z usuwaniem bucketa

Bucket nie istnieje lub nie jest dostępny dla Twojej pary kluczy

Jeżeli bucket nie istnieje lub nie jest dostępny dla używanej pary kluczy, pojawi się następujący komunikat:

The following error occurred:
An error occurred (NoSuchBucket) when calling the DeleteBucket operation: Unknown

Bucket nie jest pusty

Jeżeli bucket nie jest pusty, nie można go usunąć. W takim przypadku pojawi się komunikat:

The following error occurred:
An error occurred (BucketNotEmpty) when calling the DeleteBucket operation: Unknown

Aby rozwiązać ten problem, usuń wszystkie obiekty z bucketa i spróbuj ponownie.

Rozwiązywanie problemów — informacje ogólne

Brak połączenia z endpointem

Jeżeli nie masz połączenia z endpointem (na przykład z powodu utraty połączenia z Internetem), powinien pojawić się komunikat podobny do poniższego:

The following error occurred:
Could not connect to the endpoint URL: "https://s3.waw4-1.cloudferro.com/"

Jeżeli tak się stanie, upewnij się, że masz aktywne połączenie z Internetem. Jeśli masz pewność, że połączenie działa poprawnie i nie ogłoszono żadnych prac serwisowych dotyczących Object Storage na NSIS Cloud, skontaktuj się z pomocą techniczną: Helpdesk i wsparcie

Nieprawidłowe dane uwierzytelniające

Jeżeli klucz access i/lub secret jest nieprawidłowy, pojawi się komunikat podobny do:

The following error occurred:
An error occurred (InvalidAccessKeyId) when calling the ListBuckets operation: Unknown

Wróć do Wymagań wstępnych Nr 2, aby uzyskać prawidłowe dane uwierzytelniające.

Bucket nie istnieje lub nie jest dostępny dla Twojej pary kluczy

Jeżeli bucket wskazany w kodzie nie istnieje lub nie jest dostępny dla używanej pary kluczy, w zależności od wykonywanej operacji mogą pojawić się różne komunikaty.

Poniżej przedstawiono dwa przykłady:

None
The following error occurred:
An error occurred (NoSuchBucket) when calling the DeleteObject operation: Unknown

Co można zrobić dalej?

boto3 może być również używane do dostępu do repozytorium EODATA na maszynach wirtualnych hostowanych na chmurze NSIS Cloud. Więcej informacji znajdziesz tutaj: Jak uzyskać dostęp do EODATA za pomocą boto3 na NSIS

Innym narzędziem umożliwiającym dostęp do Object Storage na chmurze jest s3cmd: Jak uzyskać dostęp do object storage z NSIS za pomocą s3cmd