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: