Рубрики
Без рубрики

Введение в облачное хранилище Google с Java

Приступайте к работе с облачным хранилищем Google с быстрыми примерами создания корзины, записи, чтения и обновления данных.

Автор оригинала: 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.

Мы создаем нашу конфигурацию с помощью:

  1. Переход в консоль Google Cloud Platform
  2. Если мы еще не определили проект GCP, мы нажимаем кнопку создать и вводим имя проекта, например ” baeldung-cloud-учебник
  3. Выберите ” новая учетная запись службы ” из раскрывающегося списка
  4. Добавьте имя, например ” baeldung-облачное хранилище “, в поле имя учетной записи.
  5. В разделе ” роль ” выберите Проект, а затем Владелец в подменю.
  6. Выберите создать, и консоль загрузит файл закрытого ключа.

Роль на шаге № 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.

Мы можем сделать это в два простых шага:

  1. Установите облачный SDK из инструкций здесь для нашей платформы.
  2. Следуйте инструкциям по быстрому запуску нашей платформы здесь. В шаге 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 , мы можем выполнить поиск в корзине по имени:

Page blobs = 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 .