Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
234 lines (171 sloc) 11.1 KB
title description services documentationcenter author manager keywords ms.service ms.topic ms.devlang ms.date ms.author ms.reviewer ms.custom ms.openlocfilehash ms.sourcegitcommit ms.translationtype ms.contentlocale ms.lasthandoff ms.locfileid
Java 및 Maven를 사용하여 함수 게시 - Azure Functions
Java 및 Maven을 사용하여 Azure에 간단한 HTTP 트리거 함수를 만들어 게시합니다.
functions
na
rloutlaw
justhe
Azure 함수, 함수, 이벤트 처리, 컴퓨팅, 서버리스 아키텍처
azure-functions
quickstart
java
08/10/2018
routlaw
glenga
mvc, devcenter, seo-java-july2019, seo-java-august2019, seo-java-september2019
381298abcfa4fa707af6b382565b4bfb990e96e6
3e7646d60e0f3d68e4eff246b3c17711fb41eeda
HT
ko-KR
09/11/2019
70899496

빠른 시작: Java를 사용하여 함수를 만들고 Azure Functions에 게시

이 문서에서는 Maven 명령줄 도구를 사용하여 Java 함수를 만들고 Azure Functions에 게시하는 방법을 설명합니다. 완료되면 함수 코드가 Azure의 사용 플랜에서 실행되고 HTTP 요청을 사용하여 트리거될 수 있습니다.

[!INCLUDE quickstarts-free-trial-note]

필수 조건

Java를 사용하여 함수를 개발하려면 다음을 설치해야 합니다.

[!IMPORTANT] 이 퀵 스타트를 완료하려면 JAVA_HOME 환경 변수를 JDK 설치 위치로 설정해야 합니다.

새 Functions 프로젝트 생성

빈 폴더에서 다음 명령을 실행하여 Maven archetype으로부터 Functions 프로젝트를 생성합니다.

Linux/macOS

mvn archetype:generate \
    -DarchetypeGroupId=com.microsoft.azure \
    -DarchetypeArtifactId=azure-functions-archetype 

[!NOTE] 명령 실행에 문제가 발생하는 경우 maven-archetype-plugin 버전이 사용되는지 살펴보시기 바랍니다. .pom 파일이 없는 빈 디렉터리에서 명령을 실행하고 있으므로 이전 버전에서 Maven을 업그레이드한 경우 ~/.m2/repository/org/apache/maven/plugins/maven-archetype-plugin에서 이전 버전의 플러그 인을 사용을 시도할 수도 있습니다. 그렇다면 maven-archetype-plugin 디렉터리를 삭제하고 명령을 다시 실행해보세요.

Windows

mvn archetype:generate `
    "-DarchetypeGroupId=com.microsoft.azure" `
    "-DarchetypeArtifactId=azure-functions-archetype"
mvn archetype:generate ^
    "-DarchetypeGroupId=com.microsoft.azure" ^
    "-DarchetypeArtifactId=azure-functions-archetype"

Maven이 프로젝트 생성을 완료하기 위해 필요한 값을 요청합니다. groupId, artifactIdversion 값은 Maven 명명 규칙 참고를 참조하세요. appName 값은 Azure 전체에서 고유해야 하므로 기본적으로 Maven이 이전에 입력한 artifactId 를 기준으로 앱 이름을 생성합니다. packageName 값은 생성된 함수 코드에 대한 Java 패키지를 결정합니다.

아래의 com.fabrikam.functionsfabrikam-functions 식별자는 예제로 사용되며 이 빠른 시작의 이후 단계를 좀 더 쉽게 읽는 데 도움이 됩니다. 이 단계에서는 Maven에 각자 고유의 값을 제공하시기 바랍니다.

Define value for property 'groupId' (should match expression '[A-Za-z0-9_\-\.]+'): com.fabrikam.functions
Define value for property 'artifactId' (should match expression '[A-Za-z0-9_\-\.]+'): fabrikam-functions
Define value for property 'version' 1.0-SNAPSHOT : 
Define value for property 'package': com.fabrikam.functions
Define value for property 'appName' fabrikam-functions-20170927220323382:
Define value for property 'appRegion' westus: :
Define value for property 'resourceGroup' java-functions-group: :
Confirm properties configuration: Y

Maven은 이름이 artifactId 인 새 폴더에 프로젝트 파일을 만드는데, 이 예제에서는 fabrikam-functions입니다. 이 프로젝트에서 생성된 즉시 실행 가능 코드는 요청의 본문을 에코하는 HTTP 트리거 함수입니다. src/main/java/com/fabrikam/functions/Function.java를 다음 코드로 바꿉니다.

package com.fabrikam.functions;

import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;

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

        // Parse query parameter
        String query = request.getQueryParameters().get("name");
        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();
        }
    }
}

확장 번들 사용

[!INCLUDE functions-extension-bundles]

로컬에서 함수 실행

디렉터리를 새로 만든 프로젝트 폴더(host.json 및 pom.xml 파일이 포함된 폴더)로 변경하고 Maven으로 함수를 빌드하고 실행합니다.

cd fabrikam-function
mvn clean package 
mvn azure-functions:run

[!NOTE] Java 9에서 javax.xml.bind.JAXBException 예외가 발생하면 GitHub에서 해결 방법을 참조하세요.

함수가 시스템에서 로컬로 실행되고 HTTP 요청에 응답할 준비가 완료되면 이 출력이 보입니다.

Listening on http://localhost:7071
Hit CTRL-C to exit...

Http Functions:

   hello: http://localhost:7071/api/HttpTrigger-Java

새 터미널 창에서 curl을 사용하여 명령줄에서 함수를 트리거합니다.

curl -w "\n" http://localhost:7071/api/HttpTrigger-Java -d LocalFunction
Hello LocalFunction!

터미널에서 Ctrl-C를 사용하여 함수 코드를 중지합니다.

Azure에 함수 배포

Azure Functions에 대한 배포 프로세스는 Azure CLI의 계정 자격 증명을 사용합니다. 계속하려면 Azure CLI로 로그인합니다.

az login

azure-functions:deploy Maven 대상을 사용하여 새 함수 앱에 코드를 배포합니다. 이를 통해 사용하도록 설정된 패키지에서 실행으로 Zip 배포 모드를 수행합니다.

[!NOTE] Visual Studio Code를 사용하여 함수 앱을 배포하는 경우 체험판이 아닌 구독을 선택해야 합니다. 그렇지 않으면 오류가 표시됩니다. IDE의 왼쪽에 구독이 표시됩니다.

mvn azure-functions:deploy

배포가 완료되면 Azure 함수 앱에 액세스하는 데 사용할 수 있는 URL이 표시됩니다.

[INFO] Successfully deployed Function App with package.
[INFO] Deleting deployment package from Azure Storage...
[INFO] Successfully deleted deployment package fabrikam-function-20170920120101928.20170920143621915.zip
[INFO] Successfully deployed Function App at https://fabrikam-function-20170920120101928.azurewebsites.net
[INFO] ------------------------------------------------------------------------

cURL을 사용하여 Azure에서 실행 중인 함수 앱을 테스트합니다. 아래 예제에서는 이전 단계에서 만든 사용자 고유의 함수 앱에 배포한 URL과 일치하도록 URL을 변경해야 합니다.

[!NOTE] 액세스 권한Anonymous로 설정해야 합니다. 기본 수준 Function을 선택하면 함수 엔드포인트에 액세스하기 위해 요청에 함수 키를 제공해야 합니다.

curl -w "\n" https://fabrikam-function-20170920120101928.azurewebsites.net/api/HttpTrigger-Java -d AzureFunctions
Hello AzureFunctions!

변경 및 재배포

생성된 프로젝트에서 src/main.../Function.java 원본 파일을 편집하여 함수 앱에서 반환된 텍스트를 변경합니다. 다음과 같이 변경합니다.

return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();

다음으로:

return request.createResponseBuilder(HttpStatus.OK).body("Hi, " + name).build();

변경 내용을 저장합니다. 이전처럼 터미널에서 azure-functions:deploy를 실행하여 mvn 정리 패키지를 실행하고 다시 배포합니다. 함수 앱이 업데이트되고 이 요청은 다음을 갖습니다.

curl -w '\n' -d AzureFunctionsTest https://fabrikam-functions-20170920120101928.azurewebsites.net/api/HttpTrigger-Java

업데이트된 출력은 다음과 같습니다.

Hi, AzureFunctionsTest

다음 단계

간단한 HTTP 트리거가 있는 Java 함수 앱을 만들어 Azure Functions에 배포했습니다.

  • Java 함수 개발에 대한 자세한 내용은 Java 함수 개발자 가이드를 참조합니다.
  • azure-functions:add Maven 대상을 사용하여 프로젝트에 다른 트리거가 있는 다른 함수를 추가합니다.
  • Visual Studio Code, IntelliJEclipse를 사용하여 로컬로 함수를 작성하고 디버그합니다.
  • Visual Studio Code를 사용하여 Azure에 배포된 함수를 디버그합니다. 자세한 지침은 Visual Studio Code 서버 없는 Java 애플리케이션 설명서를 참조하세요.
You can’t perform that action at this time.