Поделиться через


Разработка для файлов Azure с использованием языка Java

Узнайте, как разрабатывать приложения Java, использующие файлы Azure для хранения данных. Azure Files — это управляемый сервис для совместного использования файлов в облаке. Он обеспечивает полностью управляемые файловые ресурсы, доступные через протоколы, соответствующие отраслевому стандарту, такие как блок сообщений сервера (SMB) и система сетевых файлов (NFS). Azure Files также предоставляет REST API для программного доступа к файловым ресурсам.

В этой статье вы узнаете о различных подходах к разработке с помощью файлов Azure на Java и о том, как выбрать подход, который лучше всего соответствует потребностям вашего приложения. Вы также узнаете, как создать базовое консольное приложение, которое взаимодействует с ресурсами Azure Files.

Применяется к

Модель управления Модель выставления счетов Уровень медиа Redundancy SMB NFS
Microsoft.Storage Настроенная версия 2 HDD (стандартный) Локальное (LRS) Да Нет
Microsoft.Storage Настроенная версия 2 HDD (стандартный) Зона (ZRS) Да Нет
Microsoft.Storage Настроенная версия 2 HDD (стандартный) Гео (GRS) Да Нет
Microsoft.Storage Настроенная версия 2 HDD (стандартный) GeoZone (GZRS) Да Нет
Microsoft.Storage Настроенная версия v1 SSD (премиум) Локальное (LRS) Да Нет
Microsoft.Storage Настроенная версия v1 SSD (премиум) Зона (ZRS) Да Нет
Microsoft.Storage Pay-as-you-go HDD (стандартный) Локальное (LRS) Да Нет
Microsoft.Storage Pay-as-you-go HDD (стандартный) Зона (ZRS) Да Нет
Microsoft.Storage Pay-as-you-go HDD (стандартный) Гео (GRS) Да Нет
Microsoft.Storage Pay-as-you-go HDD (стандартный) GeoZone (GZRS) Да Нет

Сведения о разработке приложений Java с помощью файлов Azure

Файлы Azure предлагают несколько способов для разработчиков Java для доступа к данным и управления ресурсами в файлах Azure. Следующая таблица перечисляет подходы, описывает, как они работают, и предоставляет рекомендации о том, когда использовать каждый из них.

Подход Принцип работы Когда следует использовать
Стандартные библиотеки ввода-вывода файлов Использует вызовы API на уровне ОС через файловые ресурсы Azure, монтируемые с использованием SMB или NFS. При подключении общей папки с помощью SMB/NFS можно использовать библиотеки файлового ввода-вывода для языков программирования или платформ, таких как java.io и java.nio для Java. У вас есть корпоративные приложения с существующим кодом, использующим стандартные операции ввода-вывода файлов, и вы не хотите переписывать код, чтобы приложение работало с совместным файловым хранилищем Azure.
FileREST API Напрямую вызывает конечные точки HTTPS для взаимодействия с данными, хранящимися в Azure Files. Обеспечивает программное управление ресурсами файлового обмена. Пакет SDK Azure предоставляет клиентская библиотека общих папок (com.azure.storage.file.share), которая строится на API FileREST, что позволяет взаимодействовать с операциями API FileREST с помощью знакомых парадигм языка программирования Java. Вы создаете облачные службы и приложения со значением для клиентов, и вы хотите использовать расширенные функции, недоступные через стандартные библиотеки ввода-вывода файлов.
Поставщик ресурсов хранилища REST API Использует диспетчер ресурсов Azure (ARM) для управления учетными записями хранения и файловыми ресурсами. Выполняет вызов конечных точек REST API для различных операций управления ресурсами. Вашему приложению или службе необходимо выполнять задачи управления ресурсами, такие как создание, удаление или обновление учетных записей хранения или файловых ресурсов.

Для получения общей информации об этих подходах см. Обзор разработки приложений с Azure Files.

Эта статья посвящена работе с ресурсами Azure Files, используя следующие подходы:

Предпосылки

Настройка среды

Примечание.

В рамках этой статьи для сборки и запуска примера кода используется средство сборки Maven. Для работы с пакетами SDK Azure для Java есть и другие средства сборки, например Gradle.

Используйте Maven для создания нового консольного приложения или открытия существующего проекта. Выполните следующие действия, чтобы установить пакеты и добавить необходимые import директивы.

Установка пакетов

Откройте файл pom.xml в текстовом редакторе. Установите пакеты, включив файл BOM или включив прямую зависимость.

Включите BOM-файл

Добавьте azure-sdk-bom , чтобы получить зависимость от последней версии библиотеки. В следующем фрагменте замените заполнитель {bom_version_to_target} номером версии. Использование azure-sdk-bom избавляет от необходимости указывать версию каждой отдельной зависимости. Чтобы узнать больше о BOM, см. файл README для BOM Azure SDK.

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-sdk-bom</artifactId>
            <version>{bom_version_to_target}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Добавьте приведенные ниже элементы зависимости в группу зависимостей. Зависимость azure-identity необходима для подключения к службам Azure без использования паролей. Обратите внимание, что артефакты менеджера ресурсов не включены в файл BOM, поэтому их необходимо добавить как прямые зависимости.

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-storage-file-share</artifactId>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-identity</artifactId>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-core-management</artifactId>
</dependency>
<dependency>
  <groupId>com.azure.resourcemanager</groupId>
  <artifactId>azure-resourcemanager</artifactId>
  <version>{package_version_to_target}</version>
</dependency>
<dependency>
  <groupId>com.azure.resourcemanager</groupId>
  <artifactId>azure-resourcemanager-storage</artifactId>
  <version>{package_version_to_target}</version>
</dependency>

Включить прямую зависимость

Чтобы получить зависимость от конкретной версии библиотеки, добавьте прямую зависимость в проект:

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-storage-file-share</artifactId>
  <version>{package_version_to_target}</version>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-identity</artifactId>
  <version>{package_version_to_target}</version>
</dependency>
<dependency>
  <groupId>com.azure.resourcemanager</groupId>
  <artifactId>azure-resourcemanager</artifactId>
  <version>{package_version_to_target}</version>
</dependency>
<dependency>
  <groupId>com.azure.resourcemanager</groupId>
  <artifactId>azure-resourcemanager-storage</artifactId>
  <version>{package_version_to_target}</version>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-core-management</artifactId>
  <version>{package_version_to_target}</version>
</dependency>

Включите директивы импорта

Затем откройте файл кода и добавьте необходимые import директивы. В этом примере мы добавим в файл App.java следующие директивы:

import com.azure.identity.*;
import com.azure.storage.file.share.*;
import com.azure.resourcemanager.*;
import com.azure.resourcemanager.storage.models.*;
import com.azure.core.management.*;
import com.azure.core.management.profile.*;

Если вы планируете использовать библиотеки ввода-вывода файлов Java, необходимо также добавить следующие директивы импорта:

import java.io.*;
import java.nio.file.*;

Работа с файлами Azure с помощью библиотек ввода-вывода файлов Java

Стандартные библиотеки ввода/вывода (I/O) файлов – это наиболее распространённый способ доступа и работы с ресурсами Azure Files. Когда вы монтируете общий ресурс, используя SMB или NFS, ваша операционная система перенаправляет запросы API для локальной файловой системы. Этот подход позволяет использовать стандартные библиотеки ввода-вывода файлов, такие как java.io и java.nio, для взаимодействия с файлами и каталогами в общей папке.

Рекомендуется использовать библиотеки ввода-вывода файлов Java, когда это требуется для вашего приложения:

  • Совместимость приложений: Идеально подходит для бизнес-приложений с существующим кодом, который уже использует библиотеки ввода-вывода файлов Java. Вам не нужно переписывать код, чтобы приложение работало с файловым хранилищем Azure.
  • Простота использования: Библиотеки ввода-вывода java хорошо известны разработчиками и легко используются. Основное преимущество Azure Files заключается в том, что оно предоставляет доступ к API файловой системы через SMB и NFS.

В этом разделе описано, как использовать библиотеки ввода-вывода java-файлов для работы с ресурсами файлов Azure.

Дополнительные сведения и примеры см. в следующем ресурсе:

Подключить общий доступ к файлам

Чтобы использовать библиотеки ввода-вывода файлов Java, необходимо сначала подключить общую папку. Смотрите следующие ресурсы, чтобы получить руководство по подключению файловой системы с использованием SMB или NFS.

В этой статье мы используем следующий каталог для ссылки на примонтированную SMB файловую шару в системе Windows.

String fileSharePath = "Z:\\file-share";

Пример. Подключение к общей папке и перечисление каталогов с помощью библиотек ввода-вывода файлов Java

Пример кода ниже показывает, как подключиться к общей папке и вывести список каталогов в этой папке.

import java.io.*;
import java.nio.file.*;

// Add the following code to a new or existing function

String fileSharePath = "Z:\\file-share";

try {
    File directory = new File(fileSharePath);
    File[] dirs = directory.listFiles(File::isDirectory);
            
    if (dirs != null) {
        for (File dir : dirs) {
            System.out.println(dir.getName());
        }
        System.out.println(dirs.length + " directories found.");
    }
} catch (Exception e) {
    System.out.println("Error: " + e.getMessage());
}

Пример. Запись в файл в общей папке с помощью библиотек ввода-вывода файлов Java

Пример кода ниже показывает, как записывать и добавлять текст в файл:

import java.io.*;
import java.nio.file.*;
import java.util.Arrays;

// Add the following code to a new or existing function

String fileSharePath = "Z:\\file-share";
String fileName = "test.txt";

try {
    String textToWrite = "First line" + System.lineSeparator();
    Path filePath = Paths.get(fileSharePath, fileName);
        
    // Write initial content to file
    Files.write(filePath, textToWrite.getBytes());
    System.out.println("Initial text written to file");
        
    // Append additional lines to the file
    String[] textToAppend = { "Second line", "Third line" };
    Files.write(filePath, 
                Arrays.asList(textToAppend),
                StandardOpenOption.APPEND);
    System.out.println("Additional lines appended to file");
} catch (IOException ex) {
    System.out.println("Error writing to file: " + ex.getMessage());
}

Пример. Блокировка файла в общей папке с помощью библиотек ввода-вывода файлов Java

Клиенты SMB, которые подключают файловые ресурсы, могут использовать механизмы блокировки файловой системы для управления доступом к общим файлам.

В следующем примере кода показано, как заблокировать файл в общей папке:

import java.io.*;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.file.*;

// Add the following code to a new or existing function

String fileSharePath = "Z:\\file-share";
String fileName = "test.txt";
String filePath = Paths.get(fileSharePath, fileName).toString();

try (
    FileOutputStream fos = new FileOutputStream(filePath);
    FileChannel fileChannel = fos.getChannel()) {

    // Acquire an exclusive lock on this file
    FileLock lock = fileChannel.lock();

    System.out.println("File is locked.");

    // Perform file operations here

    // Release the lock
    lock.release();
    System.out.println("File lock released.");

} catch (Exception e) {
    e.printStackTrace();
}

При использовании как SMB, так и FileREST API, имейте в виду, что FileREST API использует арендаторы для управления блокировками файлов, тогда как SMB использует блокировки файловой системы, управляемые операционной системой. Чтобы узнать больше об управлении взаимодействиями блокировки файлов между SMB и FileREST API, смотрите Управление блокировками файлов.

Пример: Перечислить списки управления доступом к файлам с помощью библиотек файлового ввода-вывода Java

Пример кода ниже показывает, как перечислить списки контроля доступа (ACL) для файла:

import java.nio.file.*;
import java.nio.file.attribute.AclEntry;
import java.nio.file.attribute.AclFileAttributeView;
import java.util.List;

// Add the following code to a new or existing function

String fileSharePath = "Z:\\file-share";
String fileName = "test.txt";
String filePath = Paths.get(fileSharePath, fileName).toString();

try {
    Path path = Paths.get(filePath);

    // Get the ACL view for the file
    AclFileAttributeView aclView = Files.getFileAttributeView(
            path, AclFileAttributeView.class);

    // Get the ACL entries
    List<AclEntry> aclEntries = aclView.getAcl();

    // List all access rules for the file
    for (AclEntry entry : aclEntries) {
        System.out.println("Identity: " + entry.principal().getName());
        System.out.println("Access Control Type: " + entry.type());
        System.out.println("File System Rights: " + entry.permissions());
        System.out.println();
    }

    System.out.println(aclEntries.size() + " ACL entries found.");
} catch (Exception ex) {
    System.out.println("Error: " + ex.getMessage());
}

Работа с файлами Azure с помощью клиентской библиотеки общих папок для Java

API FileREST обеспечивает программный доступ к Azure Files. Это позволяет вам вызывать HTTPS-эндпоинты для выполнения операций с файловыми хранилищами, каталогами и файлами. API FileREST разработан для обеспечения высокой масштабируемости и продвинутых функций, которые могут быть недоступны через родные протоколы. Пакет SDK Azure предоставляет клиентские библиотеки, такие как клиентская библиотека общих папок для Java, которая основана на API FileREST.

Рассмотрите возможность использования FileREST API и клиентской библиотеки File Share, если вашему приложению требуется:

  • Расширенные функции: Получите доступ к операциям и функциям, которые недоступны через родные протоколы.
  • Настраиваемые облачные интеграции: Создавайте настраиваемые услуги с добавленной стоимостью, такие как резервное копирование, антивирус или управление данными, которые взаимодействуют непосредственно с Azure Files.
  • Оптимизация производительности: Используйте преимущества производительности в масштабных сценариях, применяя операции канала данных.

API FileREST моделирует Azure Files как иерархию ресурсов и рекомендуется для операций, выполняемых на уровне каталога или файла. Следует отдавать предпочтение REST API поставщика ресурсного хранилища для операций, выполняемых на уровне файлового сервиса или файлового ресурса.

В этом разделе описано, как использовать клиентская библиотека общих папок для Java для работы с ресурсами файлов Azure.

Для получения дополнительной информации и примеров, обратитесь к следующим ресурсам:

Авторизация доступа и создание клиента

Чтобы подключить приложение к Azure Files, создайте объект ShareClient. Этот объект является вашей отправной точкой для работы с ресурсами Azure Files. Приведенные ниже примеры кода показывают, как создать объект ShareClient, используя различные механизмы авторизации.

Для авторизации с помощью идентификатора Microsoft Entra необходимо использовать учетную запись безопасности. Какой тип субъекта безопасности требуется, зависит от того, где выполняется ваше приложение. Дополнительные сведения о сценариях проверки подлинности см. в статье "Проверка подлинности Azure с помощью Java и удостоверений Azure".

Чтобы работать с примерами кода в этой статье, назначьте встроенную роль Azure RBAC Привилегированный участник данных файлов хранилища основному объекту безопасности. Эта роль предоставляет полный доступ на чтение, запись, изменение ACL и удаление всех данных в ресурсах для всех настроенных учетных записей хранилища, независимо от уровня разрешений NTFS для файлов и каталогов. Для получения дополнительной информации смотрите доступ к файлам Azure через Microsoft Entra ID с Azure Files OAuth по REST.

Авторизация доступа с помощью DefaultAzureCredential

Простой и безопасный способ обеспечить авторизацию доступа и подключение к Azure Files — это получить OAuth токен, создав экземпляр DefaultAzureCredential. Затем вы можете использовать этот учетный данные, чтобы создать объект ShareClient.

Следующий пример создает объект ShareClient, авторизованный с использованием DefaultAzureCredential, затем создает объект ShareDirectoryClient для работы с каталогом в общей папке.

import com.azure.core.credential.TokenCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.storage.file.share.*;

// Add the following code to a new or existing function

String accountName = "<account-name>";
String shareName = "<share-name>";
TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();

// Create the ShareClient
ShareClient shareClient = new ShareClientBuilder()
    .endpoint(String.format("https://%s.file.core.windows.net", accountName))
    .shareName(shareName)
    .credential(defaultAzureCredential)
    .buildClient();

// Create a client to interact with a directory in the share
ShareDirectoryClient directoryClient = shareClient.getDirectoryClient("sample-directory");

Если вы точно знаете, какой тип учетных данных используется для проверки подлинности пользователей, вы можете получить маркер OAuth с помощью других классов в клиентской библиотеке удостоверений Azure для Java. Эти классы являются производными от класса TokenCredential .

Чтобы узнать больше о каждом из этих механизмов авторизации, см. Выберите, как авторизовать доступ к данным файла.

Пример: Копирование файлов с использованием клиентской библиотеки File Shares

Вы можете копировать файлы внутри общего ресурса или между общими ресурсами, используя следующий метод:

Вы можете скопировать файл в конечный блоб, используя следующий метод из объекта BlockBlobClient.

Следующий пример кода показывает, как скопировать файл в файл в другой файловой области:

import java.time.*;
import java.util.*;

import com.azure.core.credential.TokenCredential;
import com.azure.core.util.polling.*;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.storage.file.share.*;
import com.azure.storage.file.share.models.*;

// Add the following code to a new or existing function

String accountName = "<account-name>";
String srcShareName = "src-file-share";
String destShareName = "dest-file-share";
String srcFilePath = "src/path/to/file";
String destFilePath = "dest/path/to/file";

TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();

ShareFileClient srcShareFileClient = new ShareFileClientBuilder()
    .endpoint(String.format("https://%s.file.core.windows.net", accountName))
    .shareName(srcShareName)
    .shareTokenIntent(ShareTokenIntent.BACKUP)
    .resourcePath(srcFilePath)
    .credential(defaultAzureCredential)
    .buildFileClient();

ShareFileClient destShareFileClient = new ShareFileClientBuilder()
    .endpoint(String.format("https://%s.file.core.windows.net", accountName))
    .shareName(destShareName)
    .shareTokenIntent(ShareTokenIntent.BACKUP)
    .resourcePath(destFilePath)
    .credential(defaultAzureCredential)
    .buildFileClient();

// Copy the file from the source share to the destination share
SyncPoller<ShareFileCopyInfo, Void> poller = destShareFileClient
        .beginCopy(srcShareFileClient.getFileUrl(),
                Collections.singletonMap("file", "metadata"),
                Duration.ofSeconds(2));

final PollResponse<ShareFileCopyInfo> pollResponse = poller.poll();
final ShareFileCopyInfo value = pollResponse.getValue();
System.out.printf("Copy source: %s. Status: %s.%n", value.getCopySourceUrl(), value.getCopyStatus());

Пример: Аренда файла с использованием клиентской библиотеки File Shares

Аренда создает блокировку файла, который управляется Azure через идентификатор аренды. Аренда предоставляет механизм для координации доступа к файлам через несколько клиентов в распределённой системе. Договор аренды на файл предоставляет исключительный доступ для записи и удаления. Чтобы узнать больше о состояниях и действиях аренды, см. Файл аренды.

Следующий пример кода показывает, как создать клиента аренды, получить аренду на файл с бесконечным сроком действия и освободить аренду.

import com.azure.core.credential.TokenCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.storage.file.share.*;
import com.azure.storage.file.share.models.*;
import com.azure.storage.file.share.specialized.*;

// Add the following code to a new or existing function

String accountName = "<account-name>";
String shareName = "sample-file-share";
String filePath = "path/to/file";
        
TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();

ShareFileClient fileClient = new ShareFileClientBuilder()
    .endpoint(String.format("https://%s.file.core.windows.net", accountName))
    .shareName(shareName)
    .shareTokenIntent(ShareTokenIntent.BACKUP)
    .resourcePath(filePath)
    .credential(defaultAzureCredential)
    .buildFileClient();

// Get a ShareLeaseClient
ShareLeaseClient fileLeaseClient = new ShareLeaseClientBuilder()
        .fileClient(fileClient)
        .shareTokenIntent(ShareTokenIntent.BACKUP)
        .buildClient();
        
try {
    // Acquire a lease on the file with infinite duration
    fileLeaseClient.acquireLease();
    System.out.println("Lease acquired successfully");
            
    // Do something with the file

} catch (Exception e) {
    System.err.println("Error: " + e.getMessage());
} finally {
    // Release the lease when finished
    try {
        fileLeaseClient.releaseLease();
        System.out.println("Lease released successfully.");
    } catch (Exception e) {
        System.err.println(e.getMessage());
    }
}

При использовании как SMB, так и FileREST API, имейте в виду, что FileREST API использует арендаторы для управления блокировками файлов, тогда как SMB использует блокировки файловой системы, управляемые операционной системой. Чтобы узнать больше об управлении взаимодействиями блокировки файлов между SMB и FileREST API, смотрите Управление блокировками файлов.

Пример: Создание и перечисление снимков общего доступа с использованием библиотеки клиента File Shares

Снимки общего доступа — это копии общего ресурса файла в определенный момент времени только для чтения. Вы можете создать снимок общего файлового ресурса, а затем использовать этот снимок для доступа к данным в общем ресурсе на момент создания снимка. Вы также можете перечислить все снимки в общем доступе к файлам и удалить снимки общего ресурса.

Пример кода ниже демонстрирует, как создавать снимок общего ресурса, перечислять снимки в файловом общем ресурсе и перемещаться по древу каталогов в снимке общего ресурса.

import com.azure.storage.file.share.*;
import com.azure.storage.file.share.models.*;

// Add the following code to a new or existing function

public static void main(String[] args) {
    String connectionString = "<connection-string>";

    // Create a ShareServiceClient from which you can create clients for specific shares
    ShareServiceClient shareServiceClient = new ShareServiceClientBuilder()
    .connectionString(connectionString)
        .buildClient();
        
    // Get a client for a specific share
    ShareClient shareClient = shareServiceClient.getShareClient("sample-file-share");

    try {
        // Create a snapshot
        ShareSnapshotInfo snapshotInfo = shareClient.createSnapshot();
        System.out.println("Snapshot created: " + snapshotInfo.getSnapshot());

        // List snapshots in a share
        ListSharesOptions options = new ListSharesOptions()
            .setIncludeSnapshots(true);
                
        for (ShareItem shareItem : shareServiceClient.listShares(options, null, null)) {
            if (shareItem.getSnapshot() != null) {
                System.out.println("Share: " + shareItem.getName() + 
                    " (Snapshot: " + shareItem.getSnapshot() + ")");
            }
        }

        // List directories and files in a share snapshot
        String snapshotTimestamp = snapshotInfo.getSnapshot();
        ShareClient shareSnapshot = shareClient.getSnapshotClient(snapshotTimestamp);
        ShareDirectoryClient rootDir = shareSnapshot.getRootDirectoryClient();

        listDirectoryTree(rootDir);
            
    } catch (Exception e) {
        System.err.println("Error: " + e.getMessage());
    }
 }
    
private static void listDirectoryTree(ShareDirectoryClient directory) {
    // List all files and directories in current directory
    for (ShareFileItem fileItem : directory.listFilesAndDirectories()) {
        if (fileItem.isDirectory()) {
            System.out.println("Directory: " + fileItem.getName());
            // Recursively list subdirectory contents
            listDirectoryTree(directory.getSubdirectoryClient(fileItem.getName()));
        } else {
            System.out.println("File: " + fileItem.getName());
        }
    }
}

Примечание.

Токены OAuth, такие как полученные при использовании DefaultAzureCredential, не разрешены для операций с плоскостью данных на уровне общего доступа к файлам. Чтобы работать со снапшотами общего доступа, объект клиента должен быть авторизован с использованием ключа учетной записи. Объект ShareClient, созданный в этом примере кода, использует строку подключения, которая включает ключ учетной записи.

Хранение ключей учетных записей или строк подключения представляет собой угрозу безопасности. Вы должны использовать их только тогда, когда проверка подлинности Microsoft Entra недоступна. Чтобы узнать больше о безопасном хранении ключей учетных записей в Azure Key Vault, см. Информация о ключах учетных записей хранения, управляемых Azure Key Vault.

Управление ресурсами Azure Files с использованием библиотек управления Azure Storage

Библиотеки управления Azure Storage построены на REST API провайдера ресурсов Azure Storage. Поставщик ресурсов Azure Storage — это служба на основе Azure Resource Manager, поддерживающая как декларативные (шаблоны), так и императивные (непосредственный вызов API) методы. REST API поставщика ресурсов Azure Storage предоставляет программный доступ к ресурсам Azure Storage, включая файловые хранилища. Azure SDK предоставляет библиотеки управления, которые основываются на REST API провайдера ресурсов Azure Storage.

Рекомендуется использовать библиотеки управления для операций, выполняемых на уровне файлового сервиса или файлового обмена. В этом разделе вы узнаете, как использовать библиотеки для управления хранилищем Azure для управления ресурсами Azure Files.

Библиотеки управления Azure Storage построены на REST API провайдера ресурсов Azure Storage. Поставщик ресурсов Azure Storage — это служба на основе Azure Resource Manager, поддерживающая как декларативные (шаблоны), так и императивные (непосредственный вызов API) методы. REST API поставщика ресурсов Azure Storage предоставляет программный доступ к ресурсам Azure Storage, включая файловые хранилища. Azure SDK предоставляет библиотеки управления, которые основываются на REST API провайдера ресурсов Azure Storage.

Рекомендуется использовать библиотеки управления для операций, выполняемых на уровне файлового сервиса или файлового обмена. В этом разделе вы узнаете, как использовать библиотеки для управления хранилищем Azure для управления ресурсами Azure Files.

Пример: Создайте файловое хранилище, используя библиотеку управления Azure Storage

Следующий пример кода показывает, как создать объект верхнего уровня AzureResourceManager, зарегистрировать провайдера ресурсов хранилища в подписке и создать файловую шару с использованием библиотеки управления Azure Storage.

import com.azure.identity.*;
import com.azure.resourcemanager.*;
import com.azure.resourcemanager.storage.fluent.*;
import com.azure.resourcemanager.storage.fluent.models.*;

import com.azure.core.credential.TokenCredential;
import com.azure.core.management.*;
import com.azure.core.management.profile.*;

// Add the following code to a new or existing function

String subscriptionID = "<subscription-id>";
String rgName = "<resource-group-name>";
String saName = "<storage-account-name>";
TokenCredential credential = new DefaultAzureCredentialBuilder().build();
AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);

AzureResourceManager armClient = AzureResourceManager
        .configure()
        .authenticate(credential, profile)
        .withSubscription(subscriptionID);

// Check the registration state of the resource provider and register, if needed
if (armClient.providers().getByName("Microsoft.Storage").registrationState() == "NotRegistered")
    armClient.providers().register("Microsoft.Storage");

// Create a new file share

StorageManagementClient storageManagementClient = armClient.storageAccounts().manager().serviceClient();
FileSharesClient fileShare = storageManagementClient.getFileShares();

String shareName = "sample-file-share";
int quotaInGB = 1;
        
// Create the file share
fileShare.create(
    rgName,
    saName,
    shareName,
    new FileShareInner()
        .withShareQuota(quotaInGB)
);

Свойства общей папки можно настроить с помощью класса FileShareInner . В предыдущем примере показано, как задать квоту общего ресурса при создании общей папки. Чтобы обновить существующую общую папку, вызовите fileShare.update() и передайте FileShareInner объект со свойствами, которые требуется обновить.

Примечание.

Чтобы выполнить операцию регистрации, вам необходимы разрешения на выполнение следующего действия Azure RBAC: Microsoft.Storage/register/action. Это разрешение включено в предопределенные роли Contributor и Owner.

Пример: Список файловых разделов и снимков с использованием библиотеки управления Azure Storage

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

import com.azure.identity.*;
import com.azure.resourcemanager.*;
import com.azure.resourcemanager.storage.fluent.*;
import com.azure.resourcemanager.storage.fluent.models.*;

import com.azure.core.credential.TokenCredential;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.management.*;
import com.azure.core.management.profile.*;
import com.azure.core.util.Context;

// Add the following code to a new or existing function

String subscriptionID = "<subscription-id>";
String rgName = "<resource-group-name>";
String saName = "<storage-account-name>";
TokenCredential credential = new DefaultAzureCredentialBuilder().build();
AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);

AzureResourceManager armClient = AzureResourceManager
        .configure()
        .authenticate(credential, profile)
        .withSubscription(subscriptionID);

// Check the registration state of the resource provider and register, if needed
if (armClient.providers().getByName("Microsoft.Storage").registrationState() == "NotRegistered")
    armClient.providers().register("Microsoft.Storage");

StorageManagementClient storageManagementClient = armClient.storageAccounts().manager().serviceClient();
FileSharesClient fileShare = storageManagementClient.getFileShares();

// List all file shares and include snapshots

PagedIterable<FileShareItemInner> fileShares = fileShare.list(
    rgName,               // resource group name
    saName,               // storage account name
    null,                 // maxpagesize
    null,                 // filter
    "snapshots",          // expand to include snapshots
    Context.NONE);        // context

for (FileShareItemInner fileShareItem : fileShares) {
    System.out.println("File share name: " + fileShareItem.name());
    System.out.println("File share quota: " + fileShareItem.shareQuota());
}

Следующие шаги

Для получения дополнительной информации о разработке с использованием Azure Files, ознакомьтесь со следующими ресурсами: