メインフレーム上でローカルにデータのコード変換を行うのは 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 を使用してリモートでコード変換するには、次のタスクを行う必要があります。
- Terraform を使用して、Mainframe Connector のリモート サービスをデプロイします。Mainframe Connector のリモート サービスは、リモート コード変換を行う Cloud Run をベースとしています。Mainframe Connector リモート サービスの複数のインスタンスをデプロイする場合は、Mainframe Connector の複数のインスタンスをデプロイするをご覧ください。
- メインフレーム上のデータセットを読み取り、コード変換し、ORC 形式で Cloud Storage にアップロードします。コード変換は
cp
オペレーション中に行われます。このオペレーションでは、メインフレームの拡張バイナリ コード 10 進数交換コード(EBCDIC)データセットが、Cloud Storage バケットへのコピー中に UTF-8 の ORC 形式に変換されます。 - データセットを BigQuery テーブルに読み込みます。
- (省略可)BigQuery テーブルに対して SQL クエリを実行します。
- (省略可)BigQuery から Cloud Storage のバイナリ ファイルにデータをエクスポートします。
これらのタスクを実行する手順は次のとおりです。
Mainframe Connector のデプロイ用の tar ファイルをダウンロードします。
デプロイ用の tar ファイル内のファイルを抽出します。
tar -xvf ./deployment.tar
main.tf
ファイルとvars.tf
ファイルがデプロイ用の tar ファイルから抽出されます。vars.tf
ファイルの変数を確認し、編集します。ほとんどの変数にはすでにデフォルト値があります。ただし、次の値を設定する必要があります。設定する必要がある必須変数はproject
とconnector_service_account_email
だけです。project
: Mainframe Connector をインストールする Google Cloud プロジェクト。connector_service_account_email
: Mainframe Connector を使用して実行するオペレーションのすべての権限を持つサービス アカウント。
connector_service_ingress
変数とconnector_service_vpc_access
変数を使用してネットワーク構成を設定することもできます。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 バケットで使用する接頭辞。
.tfvars
ファイルを作成して、Mainframe Connector のデプロイ時に Terraform が使用する変数を定義します。.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。
変更を保存し、ファイルを閉じます。
Mainframe Connector をデプロイします。
terraform apply -var-file=VARIABLE_FILE_NAME
VARIABLE_FILE_NAME を前の手順で作成した変数ファイルに置き換えます。
(省略可)Mainframe Connector がデプロイされ実行されているかどうかを確認するには、[Cloud Run] ページに移動して [サービス] タブを選択します。デプロイが表に一覧表示されます。
次のように、メインフレームで、メインフレーム上のデータセットを読み取り、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 /*
このプロセスで実行されたコマンドをログに記録するには、負荷統計情報を有効にすることができます。
(省略可)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
: クエリが実行されるロケーション。データに近いロケーションでクエリを実行することをおすすめします。
(省略可)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)を設定する必要もありません。