메인프레임에 Mainframe Connector 설치

Mainframe Connector는 MVS 일괄 작업의 컨텍스트 내에서 Java 가상 머신(JVM) 프로세스로 실행됩니다. Mainframe Connector는 일반적으로 JVM에 포함된 IBM 라이브러리 이외의 필요한 종속 항목을 포함하는 JAR 파일을 사용하여 배포됩니다. 다음 섹션에서는 Mainframe Connector 설치 프로세스를 자세히 설명합니다.

시작하기 전에

Mainframe Connector 설치

Mainframe Connector를 설치하려면 다음 단계를 수행합니다.

  1. 사전 빌드된 JAR 파일을 다운로드합니다. mainframe-connector-shadow-VERSION-all.jar 파일을 7단계에 표시된 BQSH 작업 제어 언어(JCL) 프로시져의 Java Classpath 섹션에 지정된 경로에 복사합니다. VERSION은 Mainframe Connector의 버전입니다.

  2. 메인프레임에서 Google Cloud 서비스에 액세스하려면 서비스 계정 키를 JSON 키 파일로 만들고 다운로드해야 합니다. JSON 키 파일 만들기에 대한 자세한 내용은 서비스 계정 키 만들기를 참조하세요.

  3. 바이너리 전송 모드에서 파일 전송 프로토콜(FTP)을 사용하여 JSON 키 파일을 Unix 파일 시스템에 복사합니다. 수정되지 않은 JSON 키 파일을 원래 UTF-8 인코딩으로 파일 시스템에 저장해야 합니다.

    IBM z/OS Unix 파일 시스템에 JSON 키 파일을 저장하기 위한 기본 경로는 없습니다. 서비스 계정에 액세스할 수 있는 권한이 있는 사용자만 읽을 수 있는 경로를 선택해야 합니다. JSON 키 파일이 올바르게 전송되면 UNIX 시스템 서비스(USS)에서 읽을 수 없습니다.

  4. 바이너리 모드에서 FTP를 사용하여 1단계에서 다운로드한 JAR 파일을 메인프레임의 다음 위치에 업로드합니다.

     /opt/google/mainframe-connector/VERSION/
    

    Version을 JAR 파일의 버전으로 바꿉니다.

    이 경로는 JAR 파일 배포에 권장되는 경로입니다. 사이트 관리자가 선택한 어떤 경로든 사용할 수 있습니다.

  5. 다음 명령어를 실행하여 JAR 파일이 올바르게 전송되었는지 확인합니다. -t 옵션은 JAR 파일의 콘텐츠를 나열합니다.

     jar -tvf JAR_FILE_NAME
    

    JAR_FILE_NAME을 JAR 파일의 이름으로 바꿉니다.

  6. 다음 BQSH JCL 프로시져의 복사본을 만들고 다음 변수를 바꿉니다.

    BQSH JCL 프로시져에서 BQSH_ROOT_LOGGER=DEBUG는 디버그 로깅이 사용 설정되었음을 나타냅니다. 디버그 로깅을 사용 중지하려면 줄을 주석 처리하거나 변수를 DEBUG가 아닌 다른 값으로 설정합니다.

    로깅 정보를 Cloud Logging에 쓰도록 Mainframe Connector를 구성하려면 다음 예시와 같이 LOG_PROJECTLOG_ID 환경 변수를 설정합니다.

    Mainframe Connector에서 지원하는 환경 변수의 전체 목록은 환경 변수를 참조하세요.

    • GKEY_FILE_PATH를 3단계에서 설명한 JSON 키 파일의 경로로 바꿉니다.
    • JAR_FILE_PATH를 JAR 파일이 포함된 디렉터리의 경로로 바꿉니다.
    • PROJECT_NAME을 Cloud Logging에서 로그를 생성하는 프로젝트로 바꿉니다.
    • LOG_ID_NAME을 로그 이름으로 바꿉니다.
    //BQSH PROC
    //*******************************************************************
    //*
    //* Copyright 2022 Google LLC All Rights Reserved
    //*
    //* Licensed under the Apache License, Version 2.0 (the "License");
    //* you may not use this file except in compliance with the License.
    //* You may obtain a copy of the License at
    //*
    //*     http://www.apache.org/licenses/LICENSE-2.0
    //*
    //* Unless required by applicable law or agreed to in writing, software
    //* distributed under the License is distributed on an "AS IS" BASIS,
    //* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    //* See the License for the specific language governing permissions and
    //* limitations under the License.
    //*
    //*******************************************************************
    //BQSH EXEC PGM=JVMLDM86,REGION=0M,
    //  PARM='/+I com.google.cloud.bqsh.Bqsh'
    //SYSPRINT DD SYSOUT=*
    //SYSOUT   DD SYSOUT=*
    //STDOUT   DD SYSOUT=*
    //STDERR   DD SYSOUT=*
    //CEEDUMP  DD SYSOUT=*
    //ABNLIGNR DD DUMMY
    //STDIN    DD DUMMY
    //QUERY    DD DUMMY
    //INFILE   DD DUMMY
    //COPYBOOK DD DUMMY
    //KEYFILE  DD DUMMY
    //STDENV   DD *,SYMBOLS=EXECSYS
    
    # Service Account Keyfile
    # Edit the line below to specify a unix filesystem path where
    # the service account keyfile is stored.
    # The service account should be granted Storage, BigQuery and Logging permissions.
    export GKEYFILE="GKEY_FILE_PATH"
    
    # Path to directory containing google jar file
    # Edit this to set actual path selected for your site
    # it's recommended to have a path with a version identifier
    # and create a symlink to the directory of the latest version
    GOOGLE_DIR="JAR_FILE_PATH"
    GOOGLE_CLASSPATH="$GOOGLE_DIR/*"
    
    # Do not modify the 3 lines below
    # Collect system symbols from JES
    export JOBNAME=&JOBNAME
    export JOBDATE=&YYMMDD
    export JOBTIME=&HHMMSS
    
    # IBM JZOS JDK Location
    JH="/usr/lpp/java/J8.0_64"
    export JAVA_HOME="$JH"
    export PATH="/bin:$JH/bin"
    
    # Log Level
    export BQSH_ROOT_LOGGER=DEBUG
    
    # Cloud logging
    LOG_PROJECT="PROJECT_NAME"
    LOG_ID="LOG_ID_NAME"
    
    # Binary Data Sets
    # Uncomment the line below to set a default output bucket for scp.
    # The DSN of the input file is used as the object name.
    # this may greatly reduce effort across many job steps
    #export GCSDSNURI="gs://[BUCKET]/[PREFIX]"
    
    # Generational Data Sets
    # Uncomment the line below to set a default output bucket for scp GDG datasets.
    # The Cloud GDG feature emulates a GDG dataset in a versioned object.
    # Cloud Storage objects take precedence over local DSN when this is set.
    #export GCSGDGURI="gs://[BUCKET]/[PREFIX]"
    
    # Uncomment the line below to set a default output bucket for the gszutil command.
    #export GCSOUTURI="gs://[BUCKET]/[PREFIX]"
    
    # Mainframe Connector gRPC service
    # Uncomment and edit the lines below to set the Hostname or IP Address and
    # port of the gRPC data set transcoding service.
    # The gRPC service converts z/OS datasets to ORC format on VMs running in
    # Google Cloud VPC. This is strongly recommended when processing high volumes
    # of data.
    #export SRVREMOTE=
    #export SRVPORT=
    
    # Native Libraries
    JL="$JH/lib"
    LP="/lib:/usr/lib:$JH/bin:$JL/s390x:$JL/s390x/j9vm:$JH/bin/classic"
    export LIBPATH="$LP:/usr/lib/java_runtime64"
    
    # Java Classpath
    CP="$JL:$JL/ext:/usr/include/java_classes/*"
    export CLASSPATH="$CP:$GOOGLE_CLASSPATH"
    
    # JVM options
    IJO="-Xms512m -Xmx512m -Xcompressedrefs -Djava.net.preferIPv4Stack=true"
    export IBM_JAVA_OPTIONS="$IJO"
    export JZOS_MAIN_ARGS=""
    /*
    // PEND
    
  7. TLS 가로채기 프록시에서 작동하도록 Mainframe Connector를 구성하려면 BQSH JCL 절차에서 다음 Java 시스템 속성을 설정합니다.

    • javax.net.ssl.trustStore
    • javax.net.ssl.trustStorePassword
    • https.proxyHost
    • https.proxyUser
    • https.proxyPassword

    IBM_JAVA_OPTIONS의 Java 시스템 속성을 추가하기 전의 BQSH JCL 프로시져는 다음과 같습니다.

    # JVM options
    IJO="-Xms512m -Xmx512m -Xcompressedrefs -Djava.net.preferIPv4Stack=true"
    export IBM_JAVA_OPTIONS="$IJO"
     ```
    
    The BQSH JCL procedure after adding the Java system properties for
    <code>IBM_JAVA_OPTIONS</code> is as follows.
    
    ```none
    # JVM options
    IJO="-Xms512m -Xmx512m -Xcompressedrefs -Djava.net.preferIPv4Stack=true"
    IJO="$IJO -Djavax.net.ssl.trustStore=/path/to/cacerts"
    IJO="$IJO -Djavax.net.ssl.trustStorePassword=notasecret"
    IJO="$IJO -Dhttp.proxyHost=proxy.example.com"
    IJO="$IJO -Dhttp.proxyUser=username"
    IJO="$IJO -Dhttp.proxyPassword=password"
    export IBM_JAVA_OPTIONS="$IJO"
     ```
    
  8. 기본 트러스트 저장소 비밀번호 changeit를 사용하는 경우 trustStorePassword 시스템 속성을 설정할 필요가 없습니다. 프록시 기능은 Apache HttpComponents HttpClient에서 제공합니다.

    Mainframe Connector에서 지원하는 인증서 트러스트 저장소 형식을 사용해야 합니다. 인증서 트러스트 저장소는 다음 형식으로 저장할 수 있습니다.

    • PKCS12(.p12): 많은 인증서를 포함할 수 있으며 비밀번호가 필요합니다.
    • JKS(.jks): 많은 인증서를 포함할 수 있으며 비밀번호가 필요합니다.
    • PEM(.pem): base64로 인코딩된 많은 인증서를 포함할 수 있습니다.
    • 바이너리(.der): 파일당 하나의 인증서를 포함합니다.

    trustStore 시스템 속성이 디렉터리 경로인 경우 디렉터리가 스캔되고 디렉터리에서 발견된 .pem.der 형식의 모든 인증서가 신뢰할 수 있는 인증서로 추가됩니다. PKCS12 또는 JKS 인증서를 수동으로 로드해야 합니다.

언제든지 BQSH JCL 프로시져를 변경해야 할 경우 하위 환경 프로시져 라이브러리(PROCLIB)에서 새 버전을 스테이징할 수 있습니다. 이 라이브러리는 시스템 라이브러리인 SYSP.PROCLIB 앞에 추가되므로 SYSP.PROCLIB에서 프로시져를 업데이트하기 전에 하위 환경에 대해 변경 사항을 검사할 수 있습니다. 이렇게 하면 테스트 중에 업데이트된 새 프로시져를 가리키도록 JCL 프로시져를 업데이트할 필요가 없습니다.

샘플 BQSH JCL 프로시져

다음은 샘플 BQSH JCL 프로시져입니다. 이 프로시져에서 ENV 기호는 Java 표준 환경 문을 가리키는 데 사용되며 Google Cloud 환경에만 적용됩니다. 이렇게 하면 각 환경에 여러 BQSH 프로시져가 필요하지 않습니다. 특정 환경을 변경하려면 시스템 PARMLIB 라이브러리의 Google Cloud 환경에서 특정 구성원을 업데이트하기만 하면 됩니다. 예를 들어 새 JAR 파일을 만들거나 다른 IBM Java 버전을 사용하거나 환경 문을 사용하여 JSON 키 파일을 변경합니다.

#BQSH PROC ENV=DEV
//
//******************************************************************
//*
//* Copyright 2022 Google LLC All Rights Reserved
//*
//* Licensed under the Apache License, Version 2.0 (the "License");
//* you may not use this file except in compliance with the License.
//* You may obtain a copy of the License at
//*      http://www.apache.org/licenses/LICENSE-2.0
//* Unless required by applicable law or agreed to in writing , software
//* distributed under the License is distributed on as "AS IS" BASIS,
//* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express of impl.
//* See the license for the specific language governing permissions and
//* limitations under the License.
//*
//******************************************************************
//BQSH EXEC PGM=JVMLDM86,REGION=0M,
//  PARM='/+I com.google.cloud.bqsh.Bqsh'
//SYSPRINT DD SYSOUT = *
//SYSOUT   DD SYSOUT = *
//STDOUT   DD SYSOUT = *
//STDERR   DD SYSOUT = *
//CEEDUMP  DD SYSOUT = *
//ABNLIGNR DD DUMMY
//STDIN    DD DUMMY
//QUERY    DD DUMMY
//INFILE   DD DUMMY
//COPYBOOK DD DUMMY
//KEYFILE  DD DUMMY
//STDENV   DD DISP=SHR,DSN=SYSP.PARMLIB(EDW&ENV)
//         DD *,SYMBOLS=EXECSYS
# Do not modify the 3 lines below
# Collect system symbols from JES
export JOBNAME=&JOBNAME
export JOBDATE=&YYMMDD
export JOBTIME=&HHMMSS

다음은 JSON 키 파일과 Mainframe Connector 소프트웨어 JAR 파일이 참조되는 방법을 보여주는 DEV PARMLIB 구성원의 예시입니다.

# Service Account Keyfile
# Edit the line below to specify a unix filesystem path where
# the service account keyfile is stored.
# The service account should be granted Storage, BigQuery and Logging pe
GKPATH= "/opt/google/keyfile"
GKFILE= "prj-ent-edw-dev-landing-2451-f89d99af31e5.json"
export GKEYFILE= "$GKPATH/$GKFILE"

# Path  to directory containing google jar file
# Edit this is set actual path selected for your site
# its recommended to have a path with a version identifier
# and create a symlink to the directory of the latert version
GOOGLE_DIR= "/opt/google/mainframe-connector/5.9.0"
GOOGLE_CLASSPATH= "$GOOGLE_DIR/*"

#IBM JZOS JDK Location
JH= "/usr/lpp/java/J8.0_64"
export JAVA_HOME= "$JH"
export PATH= "/bin:$JH/bin"

# Log Level
export BQSH_ROOT_LOGGER=DEBUG

다음 단계