Google Cloud 上でメインフレーム データをリモートでコード変換する

メインフレーム上でローカルにデータのコード変換を行うのは CPU 使用率の高いプロセスであり、100 万命令/秒(MIPS)の高い消費につながります。これを回避するには、Cloud Run を使用して、メインフレーム データを Google Cloud 上でリモートで移動してコード変換します。これにより、メインフレームがビジネス クリティカルなタスクに解放され、MIPS の消費量も削減されます。

次の図は、メインフレーム データを Cloud Storage バケットに移動し、Cloud Run を使用してデータを ORC 形式にコード変換してから、コンテンツを BigQuery に移動する方法を示しています。

メインフレーム データをリモートでコード変換する
メインフレーム データをリモートでコード変換する

始める前に

  • サービス アカウントを作成するか、Mainframe Connector で使用する既存のサービス アカウントを指定します。このサービス アカウントには、Cloud Storage バケット、BigQuery データセットなど、使用するその他の Google Cloud リソースにアクセスするための権限が必要です。
  • 作成したサービス アカウントに Cloud Run 起動元ロールが割り当てられていることを確認します。

メインフレーム データを Google Cloud に移動し、Cloud Run を使用してリモートでコード変換する

メインフレーム データを Google Cloud に移動し、Cloud Run を使用してリモートでコード変換するには、次のタスクを行う必要があります。

  1. Terraform を使用して、Mainframe Connector のリモート サービスをデプロイします。Mainframe Connector のリモート サービスは、リモート コード変換を行う Cloud Run をベースとしています。Mainframe Connector リモート サービスの複数のインスタンスをデプロイする場合は、Mainframe Connector の複数のインスタンスをデプロイするをご覧ください。
  2. メインフレーム上のデータセットを読み取り、コード変換し、ORC 形式で Cloud Storage にアップロードします。コード変換は cp オペレーション中に行われます。このオペレーションでは、メインフレームの拡張バイナリ コード 10 進数交換コード(EBCDIC)データセットが、Cloud Storage バケットへのコピー中に UTF-8 の ORC 形式に変換されます。
  3. データセットを BigQuery テーブルに読み込みます。
  4. (省略可)BigQuery テーブルに対して SQL クエリを実行します。
  5. (省略可)BigQuery から Cloud Storage のバイナリ ファイルにデータをエクスポートします。

これらのタスクを実行する手順は次のとおりです。

  1. Mainframe Connector のデプロイ用の tar ファイルをダウンロードします。

  2. デプロイ用の tar ファイル内のファイルを抽出します。

    tar -xvf ./deployment.tar
    

    main.tf ファイルと vars.tf ファイルがデプロイ用の tar ファイルから抽出されます。

  3. vars.tf ファイルの変数を確認し、編集します。ほとんどの変数にはすでにデフォルト値があります。ただし、次の値を設定する必要があります。設定する必要がある必須変数は projectconnector_service_account_email だけです。

    • project: Mainframe Connector をインストールする Google Cloud プロジェクト。
    • connector_service_account_email: Mainframe Connector を使用して実行するオペレーションのすべての権限を持つサービス アカウント。

    connector_service_ingress 変数と connector_service_vpc_access 変数を使用してネットワーク構成を設定することもできます。

  4. Cloud Storage のバケット接頭辞を引数として指定して terraform init コマンドを実行します。Cloud Storage バケットと接頭辞を使用すると、デプロイ状態をバケットに保存するのに役立ちます。Mainframe Connector をアップグレードするときに、同じバケットと接頭辞を再利用することもできます。

    terraform init \
    -backend-config bucket=DEPLOYMENT_STATE_BUCKET \
    -backend-config prefix=BUCKET_PREFIX
    

    以下を置き換えます。

    • DEPLOYMENT_STATE_BUCKET: Cloud Storage バケットの名前。
    • BUCKET_PREFIX: Cloud Storage バケットで使用する接頭辞。
  5. .tfvars ファイルを作成して、Mainframe Connector のデプロイ時に Terraform が使用する変数を定義します。

  6. .tfvars ファイルを開き、次の変数を Key-Value ペアとして定義します。

    • instance_id: Mainframe Connector の複数のインスタンスがある場合や、異なるサービス アカウントを使用する場合は、異なるワークロードを分離するために instance_id を定義します。
    • project: Mainframe Connector をデプロイするプロジェクト。
    • connector_service_ingress: Ingress タイプ。
    • additional_labels: デプロイをテストする場合の追加ラベル。
    • connector_service_account_email: Mainframe Connector のサービス アカウント メール ID。

    変更を保存し、ファイルを閉じます。

  7. Mainframe Connector をデプロイします。

    terraform apply -var-file=VARIABLE_FILE_NAME
    

    VARIABLE_FILE_NAME を前の手順で作成した変数ファイルに置き換えます。

  8. (省略可)Mainframe Connector がデプロイされ実行されているかどうかを確認するには、[Cloud Run] ページに移動して [サービス] タブを選択します。デプロイが表に一覧表示されます。

    Cloud Run に移動します

  9. 次のように、メインフレームで、メインフレーム上のデータセットを読み取り、ORC 形式にコード変換するジョブを作成します。INFILE データセットからデータを読み取り、COPYBOOK DD からレコード レイアウトを読み取ります。入力データセットは、固定または可変レコード長でキューに格納された順次アクセス方式(QSAM)ファイルである必要があります。

    Mainframe Connector でサポートされている環境変数の一覧については、環境変数をご覧ください。

    //STEP01 EXEC BQSH
    //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
    //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME
    //STDIN DD *
    gsutil cp --replace gs://mybucket/tablename.orc \
      --remoteHost <mainframe-connector-url>.a.run.app \
      --remotePort 443
    /*
    

    このプロセスで実行されたコマンドをログに記録するには、負荷統計情報を有効にすることができます。

  10. (省略可)QUERY DD ファイルから SQL 読み取りを実行する BigQuery クエリジョブを作成して送信します。 通常、クエリは MERGE または SELECT INTO DML ステートメントであり、BigQuery テーブルが変換されます。Mainframe Connector は、ジョブ指標に記録しますが、クエリ結果をファイルに書き込みません。

    BigQuery にはさまざまな方法でクエリできます。インラインでクエリすることも、DD を使用して別のデータセットを使用してクエリすることもできます。DSN を使用して別のデータセットを使用してクエリすることもできます。

    Example JCL
    //STEP03 EXEC BQSH
    //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR
    //STDIN DD *
    PROJECT=PROJECT_NAME
    LOCATION=LOCATION
    bq query --project_id=$PROJECT \
      --location=$LOCATION/*
    /*
    

    以下を置き換えます。

    • PROJECT_NAME: クエリを実行するプロジェクトの名前。
    • LOCATION: クエリが実行されるロケーション。データに近いロケーションでクエリを実行することをおすすめします。
  11. (省略可)QUERY DD ファイルから SQL 読み取りを実行し、結果のデータセットをバイナリ ファイルとして Cloud Storage にエクスポートするエクスポート ジョブを作成して送信します。

    Example JCL
    //STEP04 EXEC BQSH
    //OUTFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
    //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME
    //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR
    //STDIN DD *
    PROJECT=PROJECT_NAME
    DATASET_ID=DATASET_ID
    DESTINATION_TABLE=DESTINATION_TABLE
    BUCKET=BUCKET
    bq export --project_id=$PROJECT \
      --dataset_id=$DATASET_ID \
      --destination_table=$DESTINATION_TABLE \
      --location="US" \
      --bucket=$BUCKET \
      --remoteHost <mainframe-connector-url>.a.run.app \
      --remotePort 443
    /*
    

    以下を置き換えます。

    • PROJECT_NAME: クエリを実行するプロジェクトの名前。
    • DATASET_ID: エクスポートするテーブルを含む BigQuery データセット ID。
    • DESTINATION_TABLE: エクスポートする BigQuery テーブル。
    • BUCKET: 出力バイナリ ファイルを含む Cloud Storage バケット。

Mainframe Connector の複数のインスタンスをデプロイする

特定のジョブへのアクセスを制限するには、Mainframe Connector の複数のインスタンスをデプロイする必要があります。これを行うには、異なる変数とサービス アカウントを使用して Mainframe Connector を複数回デプロイします。Mainframe Connector のリモート サービスは Cloud Run をベースとしているため、各サービスが実際に実行されている場合にのみ課金されます。また、各インスタンスはすでに負荷分散されており、高可用性があるため、高可用性(HA)を設定する必要もありません。