Skip to main content
  • »
  • S3 »
  • Jak uzyskać dostęp do object storage z NSIS za pomocą s3cmd

Jak uzyskać dostęp do object storage z NSIS za pomocą s3cmd

W tym artykule dowiesz się, jak uzyskać dostęp do object storage z NSIS w systemie Linux za pomocą s3cmd, bez montowania jej jako systemu plików. Można to zrobić na maszynie wirtualnej w chmurze NSIS lub na lokalnym komputerze z systemem Linux.

Co będziemy omawiać

  • Object storage a standardowy system plików

  • Terminologia: kontener i bucket

  • Konfiguracja s3cmd

  • Ścieżki S3 w s3cmd

  • Listowanie kontenerów

  • Tworzenie kontenera

  • Przesyłanie pliku do kontenera

  • Wyświetlanie plików i katalogów katalogu głównego kontenera

  • Wyświetlanie plików i katalogów spoza katalogu głównego kontenera

  • Usuwanie pliku z kontenera

  • Pobieranie pliku z kontenera

  • Sprawdzanie ilości pamięci używanej w kontenerze

  • Usuwanie całego kontenera

Wymagania wstępne

Nr 1 Konto

Potrzebne jest konto hostingowe NSIS z dostępem do interfejsu Horizon: https://horizon.cloudferro.com.

Nr 2 Generowane poświadczenia EC2

Musisz wygenerować poświadczenia EC2. Dowiedz się więcej tutaj: Jak wygenerować poświadczenia EC2 i zarządzać nimi na NSIS Cloud

Nr 3 Komputer z systemem Linux lub maszyna wirtualna

Potrzebna jest maszyna wirtualna z systemem Linux lub komputer lokalny. Ten artykuł został napisany dla Ubuntu 22.04. Inne systemy operacyjne mogą działać, ale są poza zakresem tego artykułu i mogą wymagać dostosowania poleceń.

Jeśli chcesz korzystać z maszyny wirtualnej hostowanej w chmurze NSIS i jeszcze jej nie masz, jeden z tych artykułów może Ci pomóc:

Nr 4 s3cmd zainstalowany

Musisz mieć zainstalowany s3cmd na swojej maszynie wirtualnej lub komputerze. Więcej informacji tutaj:

Nr 5 Zrozumienie, w jaki sposób s3cmd obsługuje swój plik konfiguracyjny

s3cmd przechowuje swoją konfigurację w plikach konfiguracyjnych, po jednym połączeniu na plik. Musisz zdecydować, gdzie chcesz przechowywać dane połączenia do przechowywania obiektów. Więcej informacji tutaj:

Object storage a standardowy system plików

Przechowywanie obiektów wykorzystuje obiekty, a nie pliki i foldery. Aby ułatwić pracę, pulpit nawigacyjny Horizon (sekcja Object Store -> Containers) przedstawia te obiekty jako pliki i foldery. Ta reprezentacja zwykle ma sens, ale istnieją przypadki, w których przechowywanie obiektów wyraźnie różni się od konwencjonalnego systemu plików.

Na przykład w konwencjonalnych systemach plików zwykle nie można mieć pliku i folderu o tej samej nazwie w tej samej lokalizacji. Jeśli masz plik o nazwie coś w katalogu, nie możesz utworzyć katalogu o nazwie coś w tej samej lokalizacji.

W object container jest to jednak możliwe. Jedna ścieżka może zawierać zarówno obiekt o nazwie coś/, jak i obiekt o nazwie coś. Ten pierwszy będzie reprezentowany przez pulpit nawigacyjny Horizon jako folder o nazwie coś, a drugi jako plik do pobrania o nazwie coś.

Terminologia: container i bucket

Terminy kontener (używany przez pulpit nawigacyjny Horizon) i bucket (używany przez s3cmd) są używane w tym artykule zamiennie do opisania tego samego.

Konfiguracja s3cmd

W całym tym artykule będziemy używać pliku storage-access w katalogu /home/eouser jako przykładowego pliku konfiguracyjnego; zachęcamy do dostosowania poleceń do własnych potrzeb.

Oto polecenie rozpoczynające proces konfiguracji s3cmd:

s3cmd -c /home/eouser/storage-access --configure

Powinna pojawić się seria pytań. Odpowiedz na nie tak, jak pokazano poniżej, ale zastąp access_key i secret_key odpowiednio kluczami access i secret, które uzyskałeś podczas wykonywania Wymagania wstępnego nr 2. Zastąp również your_password hasłem do swojego konta. Po udzieleniu odpowiedzi na każde pytanie, naciśnij Enter.

Po podaniu konfiguracji powinno zostać zadane następujące pytanie:

Test access with supplied credentials? [Y/n]

Odpowiedz Y i naciśnij Enter.

Poczekaj, aż testowanie zostanie zakończone. Nie powinno to zająć więcej niż kilka sekund. Jeśli proces się powiedzie, powinieneś otrzymać poniższe dane wyjściowe:

Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)

Now verifying that encryption works...
Success. Encryption and decryption worked fine :-)

Save settings? [y/N]

Ponownie odpowiedz Y i naciśnij Enter.

Powinieneś otrzymać odpowiednie potwierdzenie i powrócić do wiersza poleceń. Potwierdzenie może wyglądać następująco:

Configuration saved to 'storage-access'

Powinieneś teraz powrócić do wiersza poleceń.

Ścieżki S3 w s3cmd

Podczas uzyskiwania dostępu do magazynu obiektów z projektu, s3cmd używa struktury ścieżki, która zaczyna się od s3://, a po niej następuje nazwa containera zakończona ukośnikiem. Następnie mamy ścieżkę z jej elementami oddzielonymi znakami /. Na przykład to, co pulpit nawigacyjny Horizon pokazuje jako plik o nazwie mój-plik.txt w katalogu o nazwie mój-folder w container o nazwie mój-kontener, będzie określane przez s3cmd jako s3://mój-kontener/mój-folder/mój-plik.txt.

Listowanie kontenerów

Aby wyświetlić listę kontenerów, wykonaj następujące polecenie:

s3cmd -c /home/eouser/storage-access ls

Jeśli nie masz żadnych kontenerów, wynik polecenia powinien być pusty.

Jeśli posiadasz kontenery, powinieneś otrzymać na przykład ich listę:

2024-01-23 14:21  s3://my-files
2024-01-23 14:21  s3://my-other-files

Tworzenie kontenera

Do utworzenia kontenera można użyć s3cmd. Aby to zrobić, wykonaj poniższe polecenie (zastąp my-bucket nazwą, którą chcesz wybrać dla swojego bucketu):

s3cmd -c /home/eouser/storage-access mb s3://my-bucket

Jeśli proces się powiedzie, powinieneś otrzymać następujące dane wyjściowe:

Bucket 's3://my-bucket/' created

Kontener powinien być teraz widoczny po użyciu polecenia s3cmd ls na połączeniu:

2024-01-04 10:49  s3://my-bucket

Rozwiązywanie problemów

Kontener już istnieje

Jeśli otrzymasz następujące dane wyjściowe:

ERROR: Bucket 'my-bucket' already exists
ERROR: S3 error: 409 (BucketAlreadyExists)

wybierz inną nazwę kontenera i spróbuj ponownie.

Użycie nieobsługiwanych znaków w nazwie kontenera

W przypadku próby utworzenia kontenera o nazwie zawierającej niedozwolone znaki, powinien zostać wyświetlony następujący komunikat:

ERROR: Parameter problem: Bucket name 'my_bucket' contains disallowed character '_'. The only supported ones are: lowercase us-ascii letters (a-z), digits (0-9), dot (.) and hyphen (-).

W takim przypadku należy upewnić się, że używane są tylko obsługiwane znaki.

Przesyłanie pliku do kontenera

Aby przesłać plik do kontenera, wprowadź poniższe polecenie. Zastąp /home/eouser/my-file.txt nazwą i lokalizacją pliku, który chcesz przesłać. Zastąp my-bucket/my-directory ścieżką, pod którą chcesz przesłać plik.

s3cmd -c /home/eouser/storage-access put /home/eouser/my-file.txt s3://my-bucket/my-directory/

Upewnij się, że kończysz ścieżkę ukośnikiem. Jeśli pominiesz ukośnik, plik nie zostanie wyświetlony w Horizon jako przesłany do folderu określonego przez Ciebie, ale zostanie przesłany pod tą nazwą. Jeśli chcesz, aby Horizon pokazywał folder bezpośrednio do głównego „folderu” kontenera, wprowadź tylko s3://, a następnie nazwę kontenera jako ścieżkę.

Dane wyjściowe powinny pokazywać proces przesyłania. Gdy proces się powiedzie, nastąpi powrót do wiersza poleceń.

Wyświetlanie plików i folderów katalogu głównego kontenera

Aby wyświetlić listę plików i folderów w katalogu głównym kontenera, wykonaj polecenie s3cmd ls na nazwie kontenera poprzedzonej s3://

Na przykład, aby wyświetlić zawartość kontenera o nazwie my-files, wykonaj to polecenie:

s3cmd -c /home/eouser/storage-access ls s3://my-files

Poniższe polecenie (zakończone ukośnikiem) powinno również działać w tym celu:

s3cmd -c /home/eouser/storage-access ls s3://my-files

Załóżmy, że użyta lokalizacja zawiera tylko katalog (który może, ale nie musi zawierać innych plików) o nazwie some-directory i plik o nazwie text-file.txt. W tym przypadku wynik będzie wyglądał następująco:

                          DIR  s3://my-files/some-directory/
2024-01-23 14:39           10  s3://my-files/text-file.txt

Wyświetlanie plików i folderów spoza katalogu głównego kontenera

Aby wyświetlić pliki wewnątrz tego, co Horizon pokazuje jako foldery, użyj pełnej ścieżki oddzielonej ukośnikami (zakończ ją również ukośnikiem). Na przykład, aby wyświetlić zawartość folderu o nazwie jakiś-inny-katalog wewnątrz folderu jakiś-katalog w kontenerze o nazwie moje-pliki, wykonaj:

s3cmd -c /home/eouser/storage-access ls s3://my-files/some-directory/some-other-directory/

Dane wyjściowe powinny zawierać listę znajdujących się tam obiektów, np:

2024-01-23 14:30            0  s3://my-files/some-directory/some-other-directory/
2024-01-23 14:32           19  s3://my-files/some-directory/some-other-directory/some-other-file.txt
2024-01-23 14:31           19  s3://my-files/some-directory/some-other-directory/yet-another-file.txt

Kończenie ścieżek ukośnikiem podczas używania s3cmd ls

Podczas listowania zawartości katalogów za pomocą komendy s3cmd ls, upewnij się, że kończysz ścieżki ukośnikiem. Na przykład, lista plików znalezionych w folderze o nazwie some-directory w kontenerze o nazwie my-files może być wykonana w ten sposób:

s3cmd -c /home/eouser/storage-access ls s3://my-files/some-directory/

W tym przypadku wynik powinien być poprawny (zauważ, że w tym przykładzie katalog jakiś-inny-katalog może, ale nie musi zawierać niektórych plików):

                          DIR  s3://my-files/some-directory/some-other-directory/
2024-01-23 14:25            0  s3://my-files/some-directory/
2024-01-23 14:27           15  s3://my-files/some-directory/another-file.txt
2024-01-23 14:28           23  s3://my-files/some-directory/first-file.txt

Jeśli jednak pominiesz ukośnik na końcu:

s3cmd -c /home/eouser/eodata-access ls s3://my-files/some-directory

dane wyjściowe będą zawierać tylko żądanie z dodanym ukośnikiem na końcu:

DIR  s3://my-files/some-directory/

Usuwanie pliku z kontenera

Aby usunąć plik z kontenera, wykonaj polecenie s3cmd rm ze ścieżką pliku, który chcesz usunąć. Na przykład:

s3cmd -c /home/eouser/storage-access rm s3://my-bucket/my-folder/my-file.txt

Powinieneś otrzymać takie potwierdzenie:

delete: 's3://my-bucket/my-folder/my-file.txt'

Pobieranie pliku z kontenera

Aby pobrać plik z bucketu na lokalny dysk twardy, wykonaj polecenie s3cmd get z pełną ścieżką do pliku, który chcesz pobrać. Przykład:

s3cmd -c /home/eouser/storage-access get s3://my-bucket/my-folder/my-file.txt

Powinien rozpocząć się proces pobierania do bieżącego katalogu roboczego.

Rozwiązywanie problemów

Jeśli plik już istnieje w bieżącym katalogu roboczym, powinieneś otrzymać następujący wynik:

ERROR: Parameter problem: File ./my-file.txt already exists. Use either of --force / --continue / --skip-existing or give it a new name.

W przypadku użycia parametru –force, plik wykryty przez s3cmd zostanie nadpisany. Parametr –continue może być użyty do wznowienia zatrzymanego procesu pobierania. Jeśli chcesz nadać plikowi inną nazwę, umieść ją po ścieżce S3, oddzielając spacją. Na przykład:

s3cmd -c /home/eouser/storage-access get s3://my-bucket/my-folder/my-file.txt another-name.txt

Sprawdzanie ilości pamięci używanej w kontenerze

Aby sprawdzić, ile miejsca zajmuje określona ścieżka, należy użyć polecenia s3cmd du. Jeśli chcesz uzyskać wartości czytelne dla człowieka, użyj parametru -H. Na przykład:

s3cmd -c /home/eouser/storage-access du -H s3://my-bucket

Wynik powinien wyglądać następująco:

318M       2 objects s3://my-bucket/

Usuwanie całego kontenera

Możesz użyć s3cmd, aby usunąć cały kontener. Aby to zrobić, kontener musi być pusty.

Wykonaj polecenie s3cmd rb, po którym następuje spacja, s3:// i nazwa bucketu. Na przykład, aby usunąć container o nazwie my-bucket, wykonaj to polecenie:

s3cmd -c /home/eouser/storage-access rb s3://my-bucket

Jeśli proces zakończył się pomyślnie, powinieneś otrzymać odpowiednie potwierdzenie, takie jak to:

Bucket 's3://my-bucket/' removed

Co można zrobić dalej

Możesz użyć s3cmd, aby udostępnić swój kontener poza projektem, stosując zasady udostępniania. Ten artykuł zawiera więcej informacji:

Udostępnianie bucketów przy użyciu polityki s3 bucket w NSIS

s3cmd może być również użyty do uzyskania dostępu do repozytorium eodata. Więcej informacji tutaj:

Jak uzyskać dostęp do EODATA za pomocą s3cmd na NSIS