Blog

Open Cloud Engine은 자체 도움말을 위해서 Gitbook을 구성하였습니다.

Gitbook은 www.opencloudengine.org로 연결이 되어 누구나 접근할 수 있도록 하였습니다.

https://www.opencloudengine.org/

AWS, Azure 등의 Public Cloud의 Storage 서비스에서 Configuration 정보를 로딩하여 제공하는 DFM 서비스입니다.

Github Repository는 https://github.com/TheOpenCloudEngine/dfm-configuration-services 입니다.

지원하는 Public Cloud

  • AWS
  • Azure

지원하는 주요 기능

  • YAML
  • XML
  • Properties
  • JSON
  • Text

Processor에서 사용하기

Processor에서 이 Controller Service를 호출하기 위해서 Maven POM에 API를 dependency로 추가하도록 합니다.

사용상 제약사항

  • Configuration 파일을 로딩한 후 캐슁을 진행하므로 캐슁된 내용을 변경하고자 하는 경우
    • Configuration Service를 재시작하거나
    • org.opencloudengine.dfm.services.configuration.ConfigurationService.reload() 메소드를 호출한다.

본 프로젝트는 NiFi에서 제공하는 API를 Java 호출할 수 있도록 Java API를 제공합니다. Github Repository는 https://github.com/TheOpenCloudEngine/nifi-api-java 입니다.

Overview

  • NiFi 소스코드를 다운로드하여 swagger.json 파일의 위치를 확인합니다.
  • Swagger Codegen으로 swagger.json 파일을 로딩하여 Java로 변환합니다.
  • 변환된 코드에서 NiFi 상위버전 부터 SSL 필수이므로 SSL 인증서 처리 및 OAuth 인증 처리 부분을 수정합니다.
    • OkHTTP를 사용하므로 SSL을 무시하도록 하고 Basic Auth, OAuth2를 추가하도록 합니다.

Swagger Codegen

Swagger Codegen을 이용하여 Client API를 생성합니다.

# cd nifi-1.19.1
# mvn -Dmaven.test.skip=true install
# wget https://oss.sonatype.org/content/repositories/releases/io/swagger/swagger-codegen-cli/2.2.1/swagger-codegen-cli-2.2.1.jar
# java -jar swagger-codegen-cli-2.2.1.jar generate -i ../nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/target/swagger-ui/swagger.json -l java


Installation

Maven Install을 통해서 JAR 파일을 다음과 같이 생성합니다.

# mvn install

API 호출

API 호출을 위해서 Basic Auth로 Access Token을 얻습니다.

import io.swagger.client.*;
import io.swagger.client.auth.*;
import io.swagger.client.model.*;
import io.swagger.client.api.AccessApi;

import java.io.File;
import java.util.*;

public class AccessApiExample {

    public static void main(String[] args) {
        AccessApi accessApi = new AccessApi();
        ApiClient client = new ApiClient(true);
        client.setDebugging(true);
        client.addDefaultHeader("Authorization", getBasicAuthenticationHeader("admin", "adminadminadmin"));
        client.setBasePath("https://localhost:8443/nifi-api");

        accessApi.setApiClient(client);
        String accessToken = accessApi.createAccessToken("admin", "adminadminadmin");
    }
}

Access Token을 이용하여 API를 호출합니다.

import io.swagger.client.*;
import io.swagger.client.auth.*;
import io.swagger.client.model.*;
import io.swagger.client.api.AccessApi;

import java.io.File;
import java.util.*;

public class ResourcesApiExample {

    public static void main(String[] args) {
        ResourcesApi api = new ResourcesApi();

        ApiClient client = new ApiClient(true);
        client.setDebugging(true);
        client.setBasePath("https://localhost:8443/nifi-api");
        client.addDefaultHeader("Authorization", String.format("Bearer %s", accessToken));
        api.setApiClient(client);

        ResourcesEntity response = api.getResources();
    }
}