Azure Storage API で Spring Boot Starter を使用する方法How to use the Spring Boot Starter with the Azure Storage API

概要Overview

この記事では、Spring Initializr を使用してカスタム アプリケーションを作成し、そのアプリケーションを使用して、Azure Storage API で Azure Storage にアクセスする手順について説明します。This article walks you through creating a custom application using the Spring Initializr, and then using that application to access Azure storage by using the Azure Storage API.

前提条件Prerequisites

この記事の手順に従うには、次の前提条件が必要です。The following prerequisites are required in order to follow the steps in this article:

Spring Initializr を使用してカスタム アプリケーションを作成するCreate a custom application using the Spring Initializr

  1. https://start.spring.io/ を参照します。Browse to https://start.spring.io/.

  2. JavaMaven プロジェクトを生成することを指定し、アプリケーションの [Group](グループ)[Artifact](アーティファクト) に名前を入力して、Spring Initializr の [Switch to the full version](完全バージョンへの切り替え) のリンクをクリックします。Specify that you want to generate a Maven project with Java, enter the Group and Artifact names for your application, and then click the link to Switch to the full version of the Spring Initializr.

    基本的な Spring Initializr オプション

    注意

    Spring Initializr では、 [Group](グループ)[Artifact](アーティファクト) の名前を使用してパッケージ名を作成します (例: com.contoso.wingtiptoysdem)。The Spring Initializr will use the Group and Artifact names to create the package name; for example: com.contoso.wingtiptoysdemo.

  3. 下へスクロールして [Azure] セクションを表示し、 [Azure Storage] チェック ボックスをオンにします。Scroll down to the Azure section and check the box for Azure Storage.

    すべての Spring Initializr オプション

  4. ページの下部までスクロールし、 [Generate Project](プロジェクトの生成) をクリックします。Scroll to the bottom of the page and click the button to Generate Project.

    すべての Spring Initializr オプション

  5. メッセージが表示されたら、ローカル コンピューター上のパスにプロジェクトをダウンロードします。When prompted, download the project to a path on your local computer.

    カスタム Spring Boot プロジェクトのダウンロード

Azure へのサインインと使用するサブスクリプションの選択Sign into Azure and select the subscription to use

  1. コマンド プロンプトを開きます。Open a command prompt.

  2. Azure CLI を使って、Azure アカウントにサインインします。Sign into your Azure account by using the Azure CLI:

    az login
    

    指示に従って、サインインを完了します。Follow the instructions to complete the sign-in process.

  3. サブスクリプションを一覧表示します。List your subscriptions:

    az account list
    

    Azure からサブスクリプションの一覧が返されます。使用するサブスクリプションの GUID をコピーする必要があります。次に例を示します。Azure will return a list of your subscriptions, and you will need to copy the GUID for the subscription that you want to use; for example:

    [
      {
        "cloudName": "AzureCloud",
        "id": "ssssssss-ssss-ssss-ssss-ssssssssssss",
        "isDefault": true,
        "name": "Converted Windows Azure MSDN - Visual Studio Ultimate",
        "state": "Enabled",
        "tenantId": "tttttttt-tttt-tttt-tttt-tttttttttttt",
        "user": {
          "name": "contoso@microsoft.com",
          "type": "user"
        }
      }
    ]
    
  4. Azure で使用するアカウントの GUID を指定します。例を次に示します。Specify the GUID for the account you want to use with Azure; for example:

    az account set -s ssssssss-ssss-ssss-ssss-ssssssssssss
    

Azure Storage アカウントの作成Create an Azure Storage account

  1. この記事で使用する Azure リソースのリソース グループを作成します。次に例を示します。Create a resource group for the Azure resources you will use in this article; for example:

    az group create --name wingtiptoysresources --location westus
    

    各値の説明:Where:

    パラメーターParameter 説明Description
    name リソース グループの一意の名前を指定します。Specifies a unique name for your resource group.
    location リソース グループをホストする Azure リージョンを指定します。Specifies the Azure region where your resource group will be hosted.

    次のように、Azure CLI に、リソース グループ作成の結果が表示されます。The Azure CLI will display the results of your resource group creation; for example:

    {
      "id": "/subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss/resourceGroups/wingtiptoysresources",
      "location": "westus",
      "managedBy": null,
      "name": "wingtiptoysresources",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null
    }
    
  2. Spring Boot アプリのリソース グループに Azure ストレージ アカウントを作成します。次に例を示します。Create an Azure storage account in the in the resource group for your Spring Boot app; for example:

    az storage account create --name wingtiptoysstorage --resource-group wingtiptoysresources --location westus --sku Standard_LRS
    

    各値の説明:Where:

    パラメーターParameter 説明Description
    name ストレージ アカウントの一意の名前を指定します。Specifies a unique name for your storage account.
    resource-group 前の手順で作成したリソース グループの名前を指定します。Specifies the name of the resource group group you created in the previous step.
    location ストレージ アカウントをホストする Azure リージョンを指定します。Specifies the Azure region where your storage account will be hosted.
    sku Premium_LRSStandard_GRSStandard_LRSStandard_RAGRSStandard_ZRS のいずれかを指定します。Specifies one of the following: Premium_LRS, Standard_GRS, Standard_LRS, Standard_RAGRS, Standard_ZRS.

    Azure から、プロビジョニングの状態を含む長い JSON 文字列が返されます。次に例を示します。Azure will return a long JSON string which contains the provisioning state; for example: |

    {
      "id": "/subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss/...",
      "identity": null,
      "kind": "Storage"
        ...
        ... (A long list of values will be displayed here.)
        ...
      "statusOfPrimary": "available",
      "statusOfSecondary": null,
      "tags": {},
      "type": "Microsoft.Storage/storageAccounts"
    }
    
  3. ストレージ アカウントの接続文字列を取得します。次に例を示します。Retrieve the connection string for your storage account; for example:

    az storage account show-connection-string --name wingtiptoysstorage --resource-group wingtiptoysresources
    

    各値の説明:Where:

    パラメーターParameter 説明Description
    name 前の手順で作成したストレージ アカウントの一意の名前を指定します。Specifies a unique name of the storage account you created in previous steps.
    resource-group 前の手順で作成したリソース グループの名前を指定します。Specifies the name of the resource group you created in previous steps.

    Azure から、ストレージ アカウントの接続文字列を含む JSON 文字列が返されます。次に例を示します。Azure will return a JSON string which contains the connection string for your storage account; for example:

    {
      "connectionString": "DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=wingtiptoysstorage;AccountKey=AbCdEfGhIjKlMnOpQrStUvWxYz=="
    }
    

Spring Boot アプリケーションの構成とコンパイルConfigure and compile your Spring Boot application

  1. ダウンロードしたプロジェクトのアーカイブからディレクトリにファイルを抽出します。Extract the files from the downloaded project archive into a directory.

  2. プロジェクトの src/main/resources フォルダーに移動し、テキスト エディターで application.properties ファイルを開きます。Navigate to the src/main/resources folder in your project and open the application.properties file in a text editor.

  3. ストレージ アカウントのキーを追加します。次に例を示します。Add the key for your storage account; for example:

    azure.storage.connection-string=DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=wingtiptoysstorage;AccountKey=AbCdEfGhIjKlMnOpQrStUvWxYz==
    
  4. プロジェクトの /src/main/java/com/example/wingtiptoysdemo フォルダーに移動し、テキスト エディターで WingtiptoysdemoApplication.java ファイルを開きます。Navigate to the /src/main/java/com/example/wingtiptoysdemo folder in your project and open the WingtiptoysdemoApplication.java file in a text editor.

  5. 既存の Java コードを、コンテナー内の BLOB を一覧表示する次の例に置き換えます。Replace the existing Java code with the following example that lists the blobs in a container:

    package com.example.wingtiptoysdemo;
    
    import com.microsoft.azure.storage.*;
    import com.microsoft.azure.storage.blob.*;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    import java.net.URISyntaxException;
    
    @SpringBootApplication
    public class WingtiptoysdemoApplication implements CommandLineRunner {
    
       @Autowired
       private CloudStorageAccount cloudStorageAccount;
    
       final String containerName = "mycontainer";
    
       public static void main(String[] args) {
          SpringApplication.run(WingtiptoysdemoApplication.class, args);
       }
    
       public void run(String... var1)
              throws URISyntaxException, StorageException {
           // Create a container (if it does not exist).
           createContainerIfNotExists(containerName);
           // Upload a blob to the container.
           uploadTextBlob(containerName);
       }
    
       private void createContainerIfNotExists(String containerName)
             throws URISyntaxException, StorageException {
          try
          {
             // Create a blob client.
             final CloudBlobClient blobClient = cloudStorageAccount.createCloudBlobClient();
             // Get a reference to a container. (Name must be lower case.)
             final CloudBlobContainer container = blobClient.getContainerReference(containerName);
             // Create the container if it does not exist.
             container.createIfNotExists();
          }
          catch (Exception e)
          {
             // Output the stack trace.
             e.printStackTrace();
          }
       }
    
       private void uploadTextBlob(String containerName)
             throws URISyntaxException, StorageException {
          try
          {
             // Create a blob client.
             final CloudBlobClient blobClient = cloudStorageAccount.createCloudBlobClient();
             // Get a reference to a container. (Name must be lower case.)
             final CloudBlobContainer container = blobClient.getContainerReference(containerName);
             // Get a blob reference for a text file.
             CloudBlockBlob blob = container.getBlockBlobReference("test.txt");
             // Upload some text into the blob.
             blob.uploadText("Hello World!");
          }
          catch (Exception e)
          {
             // Output the stack trace.
             e.printStackTrace();
          }
       }
    }
    

    注意

    上記の例では、application.properties ファイルで定義されているストレージ アカウント設定を Autowire します。The above example autowires the storage account settings that you defined in the application.properties file.

  6. アプリケーションをビルドし、実行します。Compile and run the application:

    mvn clean package spring-boot:run
    

    アプリケーションによってコンテナーが作成され、テキスト ファイルが BLOB としてコンテナーにアップロードされます。BLOB は、Azure Portal でストレージ アカウントの下に表示されます。The application will create a container and upload a text file as a blob to the container, which will be listed under your storage account in the Azure portal.

    Azure Portal での BLOB の表示

    注意

    アプリケーションをコンパイルするときに、次のエラー メッセージが表示される場合があります。When you compile your application, you might see the following error message:

    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 2.616 s
    [INFO] Finished at: 2017-11-11T13:14:15Z
    [INFO] Final Memory: 26M/213M
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2
    .18.1:test (default-test) on project wingtiptoysdemo: Execution default-test of
    goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test failed: The for
    ked VM terminated without properly saying goodbye. VM crash or System.exit called?
    [ERROR] Command was /bin/sh -c cd /home/robert/SpringBoot/wingtiptoysdemo && /u
    sr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -jar /home/robert/SpringBoot/wingt
    iptoysdemo/target/surefire/surefirebooter6371623993063346766.jar /home/robert/S
    pringBoot/wingtiptoysdemo/target/surefire/surefire5107893623933537917tmp /home/
    robert/SpringBoot/wingtiptoysdemo/target/surefire/surefire_01414159391084128068tmp
    [ERROR] -> [Help 1]

    この場合、Maven Surefire テストを無効にしてください。そのためには、pom.xml ファイルに次のプラグイン エントリを追加します。If this happens, you might want to disable the Maven Surefire testing; to do so, add the following plugin entry in your pom.xml file:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.20.1</version>
      <configuration>
        <skipTests>true</skipTests>
      </configuration>
    </plugin>
    

次の手順Next steps

Spring および Azure の詳細については、Azure ドキュメント センターで引き続き Spring に関するドキュメントをご確認ください。To learn more about Spring and Azure, continue to the Spring on Azure documentation center.

その他のリソースAdditional Resources

Microsoft Azure で利用できるその他の Spring Boot Starter の詳細については、「Azure 向けの Spring Boot Starter」をご覧ください。For more information about the additional Spring Boot Starters that are available for Microsoft Azure, see Spring Boot Starters for Azure.

Spring ベースのアプリケーションへの Azure 機能の統合の詳細については、Azure の Spring Framework に関する記事をご覧ください。For additional information about integrating Azure functionality into your Spring-based applications, see Spring Framework on Azure.

Spring Boot アプリケーションから呼び出すことができるその他の Azure Storage API の詳細については、次の記事をご覧ください。For detailed information about additional Azure storage APIs that you can call from your Spring Boot applications, see the following articles: