検索

キーワード


目次

【Azure Functions】外部設定ファイル参照方法 ServiceBusTriggerをJavaで作成

  • 公開日:2021-03-30 19:56:29
  • 最終更新日:2021-03-31 20:19:41
【Azure Functions】外部設定ファイル参照方法 ServiceBusTriggerをJavaで作成

Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!

フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。

Azure Functions を使用し 外部設定ファイル参照 する。


外部設定ファイルを使用し、環境毎に設定を変更したい場合や簡単なテストをする時に、

外部ファイルのみ変更しテストの工数を減らすなど、ファイルを参照したいケースは多くあると思います。

今回は、Functionをデプロイする時に、外部設定ファイルも同時にデプロイし参照する方法の手順を説明していきます。


このページでは以下の内容を記載しています。

 ・Functions構成を把握

 ・Javaで作成したServiceBusTriggerで外部設定ファイルを読み込む

 ・ServiceBusTriggerのビルド・デプロイと外部設定ファイルの配置場所を確認

 ・動作確認
 

概要図

Function_ServiceBusTrigger構成図

様々なサービスをつくる上でサンプルとして参考にして頂けると幸いです。


前提条件

・以下の構築後から設定を行っていく

【Azure Functions】ServiceBusTriggerをJavaで作成しデプロイする


Functions構成を把握する

Kuduを使用し、現状の構成を把握する

開発ツール > 高度なツール  から移動してください。

AzureプラットフォームKudu


今回はCMDを選択して確認する。

KuduプラットフォームCMD


wwwroot>servicebus-trigger> このディレクトリに設定ファイルを配置しFunctionで読み込む様にする。

KuduプラットフォームCMD_ディレクトリ


JavaのServiceBusTriggerアプリを改修する

外部設定ファイルを作成・設定する

【Azure Functions】ServiceBusTriggerをJavaで作成しデプロイするで作成したsample-functionをベースに改修を行う。

src > main 直下にresourcesフォルダを作成し、config.txtを外部設定ファイルとして作成する。

※作成場所や内容は任意に設定してください

Java外部設定ファイル作成


pom.xml を編集する

ビルド・パッケージする時に、外部設定ファイルを指定の場所に含める様に編集する。

以下の様に、<アプリ名>/<トリガー名>/ 直下がKuduで確認したディレクトリになる。

Java外部設定ファイルpom

※pom.xml抜粋

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-antrun-plugin</artifactId>
	<version>3.0.0</version>
	<executions>
		<execution>
			<phase>package</phase>
			<configuration>
				<target>
					<mkdir
						dir="${project.build.directory}/azure-functions/${functionAppName}/servicebus-trigger/resources" />
					<copy
						todir="${project.build.directory}/azure-functions/${functionAppName}/servicebus-trigger/resources">
						<fileset
							file="${project.basedir}/src/main/resources/config.txt" />
					</copy>
				</target>
			</configuration>
			<goals>
				<goal>run</goal>
			</goals>
		</execution>
	</executions>
</plugin>



Function.java を修正する

Functionアプリで外部設定ファイルを読み込む。

今回はファイルを読み込んで、内容を出力するようにした。

package com.ms.az.functions.sample_function;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;

import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.ServiceBusQueueTrigger;

/**
 * Azure Functions with ServiceBusTrigger.
 */
public class Function {
	/**
	* ServiceBusTrigger
	* @param message
	* @param context
	*/
	@FunctionName("servicebus-trigger")
	public void run(
			@ServiceBusQueueTrigger(
					name = "message"
					, queueName = "サービスバスのQueue名称"
					, connection = "SERVICE_BUS_CONNECTIONSTRING") String message,
			final ExecutionContext context) {
		context.getLogger().info("ServiceBusTrigger start.");

		String filePath="D:\\home\\site\\wwwroot\\servicebus-trigger\\resources\\config.txt";
		Path path = Paths.get(filePath);
		File file = path.toFile();

		StringBuffer sbText= new StringBuffer();

		try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8));){
			String str;
			while ((str = reader.readLine()) != null) {
				sbText.append(str);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		//Out put message.
		context.getLogger().info("QMessage="+message + ",Config=" + sbText.toString());

		context.getLogger().info("ServiceBusTrigger end.");
	}
}

※filePath="Function内のフルパスを設定";



ビルド・デプロイ後 外部設定ファイルの配置場所を確認する

アプリをビルド・デプロイする

以下のMavenコマンドでclean後、packageを行う。

 mvn clean package

Java_cmdbuild


以下の様なpathに想定のファイルが存在する。

> target > azure-functions > sample-function01 > servicebus-trigger > resources > config.txt

Java_target_configfile


AzureFunctionsにデプロイする。

 mvn azure-functions:deploy

Java_cmddeploy


外部設定ファイルの配置場所を確認する

AzureポータルからAzureFunctionsのKuduを使用し、想定のディレクトリにファイルが存在するか確認する。

KuduプラットフォームCMD_ディレクトリチェック

上記の様にconfig.txtresourcesディレクトリ直下に配置されました。


動作確認を行う

想定のメッセージが出力されるか確認する

Functionsのログストリームを開いておく。

※ログが動的に出力されます

Function_log


ServiceBusExplorerからQueueにメッセージを送信する。

ServiceBus_Message_Send


メッセージ送信後、以下の様に、想定通りのログが出力され、外部設定ファイルを読み込んだ事が確認できる。

※Queueに入れた「0001」と外部設定ファイルの内容が出力されている

Function_log_check



最後に/まとめ

今回、Azureのサーバーレス アーキテクチャ(PaaS)ベースで外部設定ファイルを扱う事ができました。

Kuduを使用し、ファイルを差し替える事で、再デプロイを行わなくてもFunctionの挙動変えることが可能です。



既存のオンプレミス環境やIaaS環境で外部設定ファイルを使用しているアプリケーションは数多く存在していると思います。

これらの環境からAzureFunctionsへ移行させたい場合に参考になれば幸いです。

また外部設定ファイルを別ロジックに置き換えて移行した方が良い場合もありますので、よくご検討下さい。




参考サイト:

【Azure Functions】ServiceBusTriggerをJavaで作成しデプロイする




【著者】

k_toshi

----------------------------------------------------------------

編集した記事一覧

正社員/フリーランスの方でこのようなお悩みありませんか?

  • 自分に合う案件を定期的に紹介してもらいたい
  • 週2、リモートワークなど自由な働き方をしてみたい
  • 面倒な案件探し・契約周りは任せて仕事に集中したい

そのような方はぜひ、Workteriaサイトをご利用ください!

  • 定期的にご本人に合う高額案件を紹介

  • リモートワークなど自由な働き方ができる案件多数

  • 専属エージェントが契約や請求をトータルサポート