Автор оригинала: Eric Goebelbecker.
1. Обзор
Облачное хранилище Google предлагает онлайн-хранилище, адаптированное к потребностям отдельного приложения в зависимости от местоположения, частоты доступа и стоимости. В отличие от веб-сервисов Amazon, облачное хранилище Google использует единый API для доступа с высокой, средней и низкой частотой.
Как и большинство облачных платформ, Google предлагает бесплатный уровень доступа; подробная информация о ценах приведена здесь.
В этом уроке мы подключимся к хранилищу, создадим корзину, запишем, прочитаем и обновим данные. При использовании API для чтения и записи данных мы также будем использовать утилиту gsutil облачного хранилища.
2. Настройка облачного хранилища Google
2.1. Зависимость от Maven
Нам нужно добавить одну зависимость к вашему pom.xml :
com.google.cloud google-cloud-storage 1.17.0
Maven Central имеет последнюю версию библиотеки .
2.2. Создайте Ключ Аутентификации
Прежде чем мы сможем подключиться к Google Cloud, нам необходимо настроить аутентификацию . Приложения Google Cloud Platform (GCP) загружают закрытый ключ и информацию о конфигурации из файла конфигурации JSON. Мы создаем этот файл с помощью консоли GCP. Для доступа к консоли требуется действительная учетная запись Google Cloud Platform.
Мы создаем нашу конфигурацию с помощью:
- Переход в консоль Google Cloud Platform
- Если мы еще не определили проект GCP, мы нажимаем кнопку создать и вводим имя проекта, например ” baeldung-cloud-учебник “
- Выберите ” новая учетная запись службы ” из раскрывающегося списка
- Добавьте имя, например ” baeldung-облачное хранилище “, в поле имя учетной записи.
- В разделе ” роль ” выберите Проект, а затем Владелец в подменю.
- Выберите создать, и консоль загрузит файл закрытого ключа.
Роль на шаге № 6 разрешает учетной записи доступ к ресурсам проекта. Для простоты у нас есть эта учетная запись с полным доступом ко всем ресурсам проекта.
Для производственной среды мы бы определили роль, соответствующую доступу, необходимому приложению.
2.3. Установите ключ аутентификации
Затем мы копируем файл, загруженный с консоли GCP, в удобное место и указываем на него переменную среды GOOGLE_APPLICATION_CREDENTIALS . Это самый простой способ загрузить учетные данные, хотя ниже мы рассмотрим другую возможность.
Для Linux или Mac:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/file"
для окон:
set GOOGLE_APPLICATION_CREDENTIALS="C:\path\to\file"
2.4. Установите Облачные Инструменты
Google предоставляет несколько инструментов для управления своей облачной платформой. Мы собираемся использовать gsutil во время этого урока для чтения и записи данных вместе с API.
Мы можем сделать это в два простых шага:
- Установите облачный SDK из инструкций здесь для нашей платформы.
- Следуйте инструкциям по быстрому запуску нашей платформы здесь. В шаге 4 из Инициализируйте SDK , мы выбираем имя проекта на шаге 4 раздела 2.2 выше (” baeldung-облачное хранилище ” или какое бы имя вы ни использовали).
gsutil теперь установлен и настроен для чтения данных из нашего облачного проекта.
3. Подключение к хранилищу и создание корзины
3.1. Подключение к хранилищу
Прежде чем мы сможем использовать облачное хранилище Google, мы должны создать объект службы. Если мы уже настроили переменную среды GOOGLE_APPLICATION_CREDENTIALS , мы можем использовать экземпляр по умолчанию:
Storage storage = StorageOptions.getDefaultInstance().getService();
Если мы не хотим использовать переменную среды, мы должны создать Учетные данные экземпляр и передать его в Хранилище с именем проекта:
Credentials credentials = GoogleCredentials .fromStream(new FileInputStream("path/to/file")); Storage storage = StorageOptions.newBuilder().setCredentials(credentials) .setProjectId("baeldung-cloud-tutorial").build().getService();
3.2. Создание корзины
Теперь, когда мы подключены и прошли проверку подлинности, мы можем создать корзину. Ведра-это контейнеры, в которых хранятся объекты. Они могут использоваться для организации и контроля доступа к данным.
Количество объектов в ведре не ограничено. GCP ограничивает количество операций над сегментами и рекомендует разработчикам приложений уделять особое внимание операциям с объектами, а не с сегментами.
Для создания корзины требуется Информация о корзине:
Bucket bucket = storage.create(BucketInfo.of("baeldung-bucket"));
Для этого простого примера мы задаем имя корзины и принимаем свойства по умолчанию. Имена корзин должны быть глобально уникальными. Если мы выберем имя, которое уже используется, create() завершится ошибкой.
3.3. Проверка Ведра С Помощью gsutil
Поскольку теперь у нас есть ведро, мы можем изучить его с помощью gsutil.
Давайте откроем командную строку и посмотрим:
$ gsutil ls -L -b gs://baeldung-1-bucket/ gs://baeldung-1-bucket/ : Storage class: STANDARD Location constraint: US Versioning enabled: None Logging configuration: None Website configuration: None CORS configuration: None Lifecycle configuration: None Requester Pays enabled: None Labels: None Time created: Sun, 11 Feb 2018 21:09:15 GMT Time updated: Sun, 11 Feb 2018 21:09:15 GMT Metageneration: 1 ACL: [ { "entity": "project-owners-385323156907", "projectTeam": { "projectNumber": "385323156907", "team": "owners" }, "role": "OWNER" }, ... ] Default ACL: [ { "entity": "project-owners-385323156907", "projectTeam": { "projectNumber": "385323156907", "team": "owners" }, "role": "OWNER" }, ... ]
gsutil очень похож на команды оболочки, и любой, кто знаком с командной строкой Unix, должен чувствовать себя здесь очень комфортно. Обратите внимание , что мы передали путь к нашему ведру как URL: gs://baeldung-1-bucket/ , а также несколько других опций.
Параметр ls создает список или объекты или корзины , а параметр -L указывает, что нам нужен подробный список, поэтому мы получили подробную информацию о корзине , включая время создания и элементы управления доступом.
Давайте добавим некоторые данные в нашу корзину!
4. Чтение, запись и обновление данных
В облачном хранилище Google объекты хранятся в больших двоичных объектах ; Большие двоичные объекты имена могут содержать любой символ Юникода, ограниченный 1024 символами.
4.1. Запись Данных
Давайте сохраним Строку в нашем ведре:
String value = "Hello, World!"; byte[] bytes = value.getBytes(UTF_8); Blob blob = bucket.create("my-first-blob", bytes);
Как вы можете видеть, объекты-это просто массивы байтов в корзине, поэтому мы храним Строку , просто работая с ее необработанными байтами.
4.2. Считывание данных с помощью gsutil
Теперь, когда у нас есть ведро с объектом в нем, давайте взглянем на gsutil.
Давайте начнем с перечисления содержимого нашего ведра:
$ gsutil ls gs://baeldung-1-bucket/ gs://baeldung-1-bucket/my-first-blob
Мы снова передали gsutil опцию ls , но опустили -b и -L, поэтому мы попросили краткий список объектов. Мы получаем список URI для каждого объекта, который в нашем случае является одним.
Давайте рассмотрим объект:
$ gsutil cat gs://baeldung-1-bucket/my-first-blob Hello World!
Cat объединяет содержимое объекта в стандартный вывод. Мы видим Строку , которую мы записали в Большой двоичный объект.
4.3. Считывание Данных
При создании двоичным объектам присваивается BlobId .
Самый простой способ получить большой двоичный объект-это использовать BlobId :
Blob blob = storage.get(blobId); String value = new String(blob.getContent());
Мы передаем идентификатор в Хранилище и получаем Большой двоичный объект в ответ, и getContent() возвращает байты.
Если у нас нет BlobId , мы можем выполнить поиск в корзине по имени:
Pageblobs = bucket.list(); for (Blob blob: blobs.getValues()) { if (name.equals(blob.getName())) { return new String(blob.getContent()); } }
4.4. Обновление Данных
Мы можем обновить Большой двоичный объект , извлекая его и затем получая доступ к его Записываемому байтканалу :
String newString = "Bye now!"; Blob blob = storage.get(blobId); WritableByteChannel channel = blob.writer(); channel.write(ByteBuffer.wrap(newString.getBytes(UTF_8))); channel.close();
Давайте рассмотрим обновленный объект:
$ gsutil cat gs://baeldung-1-bucket/my-first-blob Bye now!
4.5. Сохраните объект в файл, затем удалите
Давайте сохраним обновленный объект в файл:
$ gsutil copy gs://baeldung-1-bucket/my-first-blob my-first-blob Copying gs://baeldung-1-bucket/my-first-blob... / [1 files][ 9.0 B/ 9.0 B] Operation completed over 1 objects/9.0 B. Grovers-Mill:~ egoebelbecker$ cat my-first-blob Bye now!
Как и ожидалось, параметр копировать копирует объект в имя файла, указанное в командной строке.
gsutil может скопировать любой объект из облачного хранилища Google в локальную файловую систему при условии, что для его хранения достаточно места.
Мы закончим с уборкой:
$ gsutil rm gs://baeldung-1-bucket/my-first-blob Removing gs://baeldung-1-bucket/my-first-blob... / [1 objects] Operation completed over 1 objects. $ gsutil ls gs://baeldung-1-bucket/ $
rm ( del тоже работает) удаляет указанный объект
5. Заключение
В этом кратком руководстве мы создали учетные данные для облачного хранилища Google и подключились к инфраструктуре. Мы создали корзину, записали данные, а затем прочитали и изменили их. Работая с API, мы также использовали gsutil для изучения облачного хранилища при создании и чтении данных.
Мы также обсудили, как эффективно использовать сегменты, а также записывать и изменять данные.
Примеры кода, как всегда, можно найти на GitHub .