LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

Azure Functions(Java)を利用するための準備運動

はじめに

この記事を書いている人

  • Javaは使ったことがありますが、ここ5年くらいはほとんど触っていません
  • 最近はElixirというプログラミング言語が大のお気に入りでございます

① 環境構築

  • macOS Catalina 10.15.7
  • Oracle JDK、JREを以前インストールしていた
  • まずは、環境を構成するを丁寧にやってみませふ

Oracle JDK、JREのアンインストール

Java11 のインストール

スクリーンショット 2021-04-10 1.19.55.png

~/.zshenv
export JAVA_HOME=`/usr/libexec/java_home`
  • と書いていました
    • いつ書いたのかはとんと思い出せないのです
$ source ~/.zshenv
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home

$ java -version
openjdk version "11.0.10" 2021-01-19 LTS
OpenJDK Runtime Environment 21.1-(Zulu-11.45+27-macosx_x64)-Microsoft-Azure-restricted (build 11.0.10+9-LTS)
OpenJDK 64-Bit Server VM 21.1-(Zulu-11.45+27-macosx_x64)-Microsoft-Azure-restricted (build 11.0.10+9-LTS, mixed mode)

:tada::tada::tada:

Apache Mavenのインストール

  • 昔インストールしたような記憶がありますが、mvncommand not foundと言われてしまいました
  • 公式の手順は面倒そうにみえたので、Homebrewでインストールしました
$ brew install maven

$ mvn -v
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: /usr/local/Cellar/maven/3.8.1/libexec
Java version: 1.8.0_282, vendor: Azul Systems, Inc., runtime: /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "mac os x", version: "10.15.7", arch: "x86_64", family: "mac"

Visual Studio Code

  • 私はすでにインストール済みでした
  • 重宝しております
  • ありがとうございます

Java Extension Pack

  • リンク先に飛んで、Installボタンを押す

Visual Studio Code 用 Azure Functions 拡張機能

  • リンク先に飛んで、Installボタンを押す
  • Visual Studio Codeが立ち上がって、そちらでInstallボタンを押す

ローカル プロジェクトを作成する

  • リンク先の通りにやればいいのですが、最初のフォルダ選択は、中身が空のmyFunctionディレクトリを選択すると吉です
  • ディレクトリ作ってくれるだろうと高を括ってすすめるとぶちまけられます
    • なんのことだかわからない方は何事も経験なので~/Desktopでも選んでやってみるとわかりますが後始末が面倒なのでおすすめしません
      • もしやっちまったら、ls -laとかして日付をみて、ぶちまけてしまったファイルやフォルダを消していくとよいでしょう
  • 「provide an app name (アプリ名を指定してください) : [myFunction-12345] 」のところの12345という数字は、Visual Studio Codeが表示していた値を変更せずにそのままエンターを押しました

関数をローカルで実行する

スクリーンショット 2021-04-10 1.34.43.png

  • ここまでポチポチやっただけで、自らはJavaのコードを一切書いていません
  • デフォルトで以下のコードが生成されています
  • nameをキーとするクエリパラメータの値を、"Hello, " + nameして返すプログラムです
  • @HttpTriggerのところはなにやらごちゃごちゃしていますが、とりあえず景色だとおもって関数本体に目を通してみるとそんなに難しいことは書いてありません
src/main/java/com/function/Function.java
package com.function;

import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;

import java.util.Optional;

/**
 * Azure Functions with HTTP Trigger.
 */
public class Function {
    /**
     * This function listens at endpoint "/api/HttpExample". Two ways to invoke it using "curl" command in bash:
     * 1. curl -d "HTTP Body" {your host}/api/HttpExample
     * 2. curl "{your host}/api/HttpExample?name=HTTP%20Query"
     */
    @FunctionName("HttpExample")
    public HttpResponseMessage run(
            @HttpTrigger(
                name = "req",
                methods = {HttpMethod.GET, HttpMethod.POST},
                authLevel = AuthorizationLevel.ANONYMOUS)
                HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        // Parse query parameter
        final String query = request.getQueryParameters().get("name");
        final String name = request.getBody().orElse(query);

        if (name == null) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
        } else {
            return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
        }
    }
}

Azure へのサインイン

  • リンクの通りに進めます
  • すでにAzureのアカウントは持っていましたし、すんなりいきました
  • そうそう、なにせ私には日本マイクロソフト賞④の受賞実績がありますから、Azureのアカウントは持っているのでありますよ
  • もう一度言います
  • $\huge{日本マイクロソフト賞④}$
  • を受賞したことがあります
    • その原動力となったのはElixirが好きだというただ一点です
    • その話はまた別の機会に

Azure にプロジェクトを発行する

  • リンクの通りに進めます
  • awesome-test-12345と、Enter a globally unique name for the function appに対して今回は入力してみました

Azure で関数を実行する

  • リンクの通りに進めます

スクリーンショット 2021-04-10 1.47.00.png

  • イゴいた:tada:、イゴいた:tada:

リソースをクリーンアップする

  • 私の場合ですとリソースグループawesometest12345を削除しました

まとめ

  • ポチポチしただけですが、Azure FunctionsにJavaのプログラムをデプロイできました
  • 次は、本題のタイマをトリガとしてAzure FunctionsでJavaのプログラムをイゴかす方法を書きたいとおもいます

あわせて読みたいオススメ記事

最後の最後に

Elixirって何よ:interrobang: という方へ

  • ちょいちょいElixirを散りばめました

image.png

EsvA7uQU0AEoTuX.jpeg

(@piacerex さん作 :pray::pray_tone1::pray_tone2::pray_tone3::pray_tone4::pray_tone5:)


  1. 「ない仕事」の作り方」は、2021年本屋大賞 『発掘部門』にて、「超発掘本!」に選ばれております。本屋大賞に選ばれたから読んだのではなく、その前から私は推していました。証拠は、2021/04/09にアップロードしたLT資料に紹介をいれています。紹介文は「私の5分の話なんかより、この本を1時間〜2時間かけて読んだほうがよっぽどいい」です。 

  2. どうしてAzure Functionsにすぐ飛びつけたのかというと、AWSの話で申し訳ありませんが、Lambdaっぽいものを探そうとしてたどり着きました。じゃあ、その前のLambdaとの馴れ初めは忘れてしまいました。 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0