Azure Cosmos DB for Apache Cassandra API で Spring Data を使用する
この記事では、Azure App Service on Linux で Java Web アプリを構築、構成、デプロイ、トラブルシューティング、およびスケーリングするプロセスを、順を追って説明します。
次のコンポーネントの使用方法を説明します。
前提条件
この記事の手順に従うには、次の前提条件が必要です。
- Java Web アプリをクラウドにデプロイするには、Azure サブスクリプションが必要です。 Azure サブスクリプションをまだお持ちでない場合は、MSDN サブスクライバーの特典を有効にするか、Azure の無料アカウントにサインアップしてください。
- Azure CLI 2.0
- Java 8 JDK
- Maven 3
重要
この記事の手順を完了するには、Spring Boot 2.5 以降のバージョンが必要です。
サンプル Java Web アプリ リポジトリを複製する
このエクササイズでは、Spring Todo アプリを使用します。これは、Spring Boot、Spring Data for Azure Cosmos DB および Azure Cosmos DB を使用して構築された Java アプリケーションです。
Spring Todo アプリを複製し、.prep フォルダーの内容をコピーしてプロジェクトを初期化します。
bash の場合:
git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git yes | cp -rf .prep/* .
Windows の場合:
git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git cd e2e-java-experience-in-app-service-linux-part-2 xcopy .prep /f /s /e /y
ディレクトリを、複製したリポジトリの以下のフォルダーに変更します。
cd initial\spring-todo-app
Azure CLI から Azure Cosmos DB を作成する
次の手順では、CLI を使用して Azure Cosmos DB データベースを作成します。
Azure CLI にサインインし、サブスクリプション ID を設定します。
az login
必要に応じて、サブスクリプション ID を設定します。
az account set -s <your-subscription-id>
Azure リソース グループを作成し、後で使用するためにそのリソース グループの名前を保存しておきます。
az group create \ --name <your-azure-group-name> \ --location <your-resource-group-region>
Azure Cosmos DB を作成し、タイプとして GlobalDocumentDB を指定します。 Azure Cosmos DB の名前には、小文字のみを使用する必要があります。 必ず応答内の
documentEndpoint
フィールドをメモしてください。 この値は、後で必要になります。az cosmosdb create \ --resource-group <your-resource-group-name> \ --name <your-azure-COSMOS-DB-name-in-lower-case-letters> \ --kind GlobalDocumentDB
Azure Cosmos DB キーを取得し、後で使用するために
primaryMasterKey
値を記録します。az cosmosdb keys list \ --resource-group <your-azure-group-name> \ --name <your-azure-COSMOSDB-name>
ローカルでアプリをビルドおよび実行する
次の手順では、開発用コンピューターでアプリケーションを実行します。
選択したコンソール内で、この記事で前に収集した Azure Cosmos DB の接続情報を使用して、次のコード セクションに示された環境変数を構成します。 WEBAPP_NAME に一意の名前を指定し、REGION 変数に値を指定する必要があります。
Linux (Bash) の場合:
export COSMOS_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here> export COSMOS_KEY=<put-your-COSMOS-DB-primaryMasterKey-here> export COSMOS_DATABASE=<put-your-COSMOS-DATABASE-name-here> export RESOURCEGROUP_NAME=<put-your-resource-group-name-here> export WEBAPP_NAME=<put-your-Webapp-name-here> export REGION=<put-your-REGION-here> export SUBSCRIPTION_ID=<put-your-SUBSCRIPTION_ID-here>
Windows (コマンド プロンプト) の場合:
set COSMOS_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here> set COSMOS_KEY=<put-your-COSMOS-DB-primaryMasterKey-here> set COSMOS_DATABASE=<put-your-COSMOS-DATABASE-name-here> set RESOURCEGROUP_NAME=<put-your-resource-group-name-here> set WEBAPP_NAME=<put-your-Webapp-name-here> set REGION=<put-your-REGION-here> set SUBSCRIPTION_ID=<put-your-SUBSCRIPTION_ID-here>
Note
スクリプトを使ってこれらの変数をプロビジョニングしたい場合は、.prep ディレクトリに Bash 用のテンプレートがあるため、それをコピーして出発点として使用することができます。
次のコマンドを使って、ディレクトリを変更します。
cd initial/spring-todo-app
次のコマンドを使用して、Spring Todo アプリをローカルで実行します。
mvn package spring-boot:run
アプリケーションが起動したら、こちら (
http://localhost:8080/
) から Spring Todo アプリにアクセスしてデプロイを検証できます。
App Service Linux にデプロイする
次の手順では、アプリケーションを Azure 上の Linux にデプロイします。
リポジトリの initial/spring-todo-app ディレクトリに以前コピーした pom.xml ファイルを開きます。 次の pom.xml ファイルで示されているように、Azure App Service 用 Maven プラグインが含まれていることを確認します。 そのバージョンが 1.14.0 に設定されていない場合は、値を更新します。
<plugins> <!--*************************************************--> <!-- Deploy to Java SE in App Service Linux --> <!--*************************************************--> <plugin> <groupId>com.microsoft.azure</groupId> <artifactId>azure-webapp-maven-plugin</artifactId> <version>1.14.0</version> <configuration> <schemaVersion>v2</schemaVersion> <subscriptionId>${SUBSCRIPTION_ID}</subscriptionId> <!-- Web App information --> <resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup> <appName>${WEBAPP_NAME}</appName> <region>${REGION}</region> <pricingTier>P1v2</pricingTier> <!-- Java Runtime Stack for Web App on Linux--> <runtime> <os>Linux</os> <javaVersion>Java 8</javaVersion> <webContainer>Java SE</webContainer> </runtime> <deployment> <resources> <resource> <directory>${project.basedir}/target</directory> <includes> <include>*.jar</include> </includes> </resource> </resources> </deployment> <appSettings> <property> <name>COSMOS_URI</name> <value>${COSMOS_URI}</value> </property> <property> <name>COSMOS_KEY</name> <value>${COSMOS_KEY}</value> </property> <property> <name>COSMOS_DATABASE</name> <value>${COSMOS_DATABASE}</value> </property> <property> <name>JAVA_OPTS</name> <value>-Dserver.port=80</value> </property> </appSettings> </configuration> </plugin> ... </plugins>
App Service Linux の Java SE にデプロイする
mvn azure-webapp:deploy
// Deploy bash-3.2$ mvn azure-webapp:deploy [INFO] Scanning for projects... [INFO] [INFO] -------< com.azure.spring.samples:spring-todo-app >-------- [INFO] Building spring-todo-app 2.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- azure-webapp-maven-plugin:1.14.0:deploy (default-cli) @ spring-todo-app --- Auth type: AZURE_CLI Default subscription: Consoto Subscription(subscription-id-xxx) Username: user@contoso.com [INFO] Subscription: Consoto Subscription(subscription-id-xxx) [INFO] Creating app service plan... [INFO] Successfully created app service plan asp-spring-todo-app. [INFO] Creating web app spring-todo-app... [INFO] Successfully created Web App spring-todo-app. [INFO] Trying to deploy artifact to spring-todo-app... [INFO] Successfully deployed the artifact to https://spring-todo-app.azurewebsites.net [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 02:05 min [INFO] Finished at: 2021-05-28T09:43:19+08:00 [INFO] ------------------------------------------------------------------------
App Service Linux の Java SE で実行されている Web アプリを参照します。
https://<WEBAPP_NAME>.azurewebsites.net
ログを表示して Azure の Spring Todo アプリをトラブルシューティングする
次の手順では、Azure でログ ファイルを開きます。
Linux の Azure App Service にデプロイされた Java Web アプリのログを構成します。
az webapp log config \ --name ${WEBAPP_NAME} \ --resource-group ${RESOURCEGROUP_NAME} \ --web-server-logging filesystem
ローカル マシンから Java Web アプリのリモート ログ ストリームを開きます。
az webapp log tail \ --name ${WEBAPP_NAME} \ --resource-group ${RESOURCEGROUP_NAME}
bash-3.2$ az webapp log tail --name ${WEBAPP_NAME} --resource-group ${RESOURCEGROUP_NAME} 2021-05-28T01:46:08.000655632Z _____ 2021-05-28T01:46:08.000701432Z / _ \ __________ _________ ____ 2021-05-28T01:46:08.000708133Z / /_\ \___ / | \_ __ \_/ __ \ 2021-05-28T01:46:08.000711733Z / | \/ /| | /| | \/\ ___/ 2021-05-28T01:46:08.000714933Z \____|__ /_____ \____/ |__| \___ > 2021-05-28T01:46:08.000718233Z \/ \/ \/ 2021-05-28T01:46:08.000721333Z A P P S E R V I C E O N L I N U X 2021-05-28T01:46:08.000724233Z Documentation: http://aka.ms/webapp-linux ... ... 2021-05-28T01:46:18.925044188Z . ____ _ __ _ _ 2021-05-28T01:46:18.925481392Z /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ 2021-05-28T01:46:18.926004297Z ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 2021-05-28T01:46:18.926587603Z \\/ ___)| |_)| | | | | || (_| | ) ) ) ) 2021-05-28T01:46:18.926599403Z ' |____| .__|_| |_|_| |_\__, | / / / / 2021-05-28T01:46:18.926841806Z =========|_|==============|___/=/_/_/_/ 2021-05-28T01:46:18.931157849Z :: Spring Boot :: (v2.4.5) ... ... 2021-05-28T01:46:29.842553633Z 2021-05-28 01:46:29.842 INFO 124 --- [ main] c.azure.spring. samples.TodoApplication : Started TodoApplication in 12.635 seconds (JVM running for 17.664) 2021-05-28T01:46:30.477951594Z 2021-05-28 01:46:30.477 INFO 124 --- [p-nio-80-exec-1] o.a.c.c.C. [Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2021-05-28T01:46:30.483316162Z 2021-05-28 01:46:30.483 INFO 124 --- [p-nio-80-exec-1] o.s.web. servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2021-05-28T01:46:30.485411088Z 2021-05-28 01:46:30.484 INFO 124 --- [p-nio-80-exec-1] o.s.web. servlet.DispatcherServlet : Completed initialization in 0 ms 2021-05-28T01:47:19.683003828Z 2021-05-28 01:47:19.682 INFO 124 --- [p-nio-80-exec-9] c.a.s.s. controller.TodoListController : GET request access '/api/todolist' path. 2021-05-28T01:47:26.069984388Z 2021-05-28 01:47:26.069 INFO 124 --- [-nio-80-exec-10] c.a.s.s. controller.TodoListController : POST request access '/api/todolist' path with item: Milk 2021-05-28T01:47:26.649080678Z 2021-05-28 01:47:26.648 INFO 124 --- [p-nio-80-exec-1] c.a.s.s. controller.TodoListController : GET request access '/api/todolist' path.
Spring Todo アプリをスケールアウトする
次の手順に従って、アプリケーションをスケーリングします。
Azure CLI を使用して Java Web アプリをスケールアウトします。
az appservice plan update \ --number-of-workers 2 \ --name ${WEBAPP_PLAN_NAME} \ --resource-group ${RESOURCEGROUP_NAME}
次のステップ
- App Service Linux の Java 開発ガイド
- Java 開発者向けの Azure Spring および Azure の詳細については、Azure の Spring ドキュメント センターにお進みください。
関連項目
Azure での Spring Boot アプリケーションの使用の詳細については、次の記事を参照してください。
Java での Azure の使用の詳細については、「Java 開発者向けの Azure」および「Azure DevOps と Java の操作」を参照してください。
Spring Framework は Java 開発者のエンタープライズ レベルのアプリケーション作成を支援するオープンソース ソリューションです。 このプラットフォームで構築される特に知られたプロジェクトの 1 つが Spring Boot です。これによって、スタンドアロンの Java アプリケーションの作成方法が簡略化されます。 Spring Boot を使い始めた開発者を支援するために、 https://github.com/spring-guides/では、サンプルの Spring Boot パッケージがいくつか用意されています。 基本的な Spring Boot プロジェクトの一覧から選択するだけでなく、 Spring Initializr は、開発者がカスタム Spring Boot アプリケーションの作成を開始できるように支援します。