HULFTとGoogle Cloud Storage(GCS)を連携させてみた。

# はじめに

セゾン情報システムズ Advent Calendar 2020
20日目を担当させていただきます。よろしくお願いいたします！

本記事では、**HULFT**と**Google Cloud Storage**(以下GCS)を連携させ、他のサーバとGCS間でファイルの送受をする方法を紹介いたします。
連携には先日、**「HULFT8 Ver.8.5.0 クラウドストレージオプション」** がリリースされ、GCSとのアップロード/ダウンロードができるようになったのでこちらを使用します。
※追記
　[V8.5.1を使用した記事も紹介しています](https://qiita.com/reohul/items/30079a759116f29ad72a)

HULFTとGCSの基本的な知識は既に持っているという方向けの記事となりますのでご了承ください。

* **HULFT**
https://www.hulft.com/software/hulft-8

* **HULFT クラウドストレージOP**
https://www.hulft.com/software/hulft-8/hulft-cso

* **GCS (Google Cloud Storage)**
https://cloud.google.com/storage

# 準備
## HULFT クラウドストレージオプションのインストール

HULFTをクラウドストレージオプション含有のプロダクトキーでインストール(通常のHULFTインストール)後、
クラウドストレージオプションのsetupをたたき、HULFTのパスを指定します。
![0ins.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922358/000481d5-09d0-61c0-5077-919d9681e45c.png)
これでインストール完了です。

## Google Cloud Storage上でバケットを用意する

GCSへのアップロード、GCSからのダウンロード、どちらをやるにしても
GCS上にバケットが存在している必要があるので、バケットを作成します。

<バケット「reohul-test」を作成>
![1bkt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922358/12a89873-7d19-42c8-f214-691dd00b11b3.png)

## Google Cloud Storageにアクセスするための認証情報を作成する

Google Cloud Platformのコンソールの[APIとサービス]-[認証情報]から、サービスアカウントキーの認証情報を
json形式で作成します。

![2json0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922358/c40702eb-0240-353d-e9d3-dcca9b424327.png)
![2json1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922358/6c92b826-c80e-0307-0704-cfc08712a201.png)
作成したjsonファイルはHULFT導入サーバの任意のパスに配置しましょう。
今回はHULFTインストールディレクトリ直下に置きましたが、どこでも問題ありません。
![2json2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922358/3dc93484-cb6c-6388-c6a8-9aad9fe0a2bc.png)


## HULFTの環境変数を設定する

通常のHULFT起動時には"HULPATH"と"HULEXEP"を設定しますが、クラウドストレージOPを
使用する場合、クラウドストレージにアクセスするためのキーが必要になります。
今回はGCSですので、先ほど配置したjsonファイルを環境変数"GOOGLE_APPLICATION_CREDENTIALS"に指定します。

<設定例>

```
HULPATH=/home/hulft/hulft/850G/etc
HULEXEP=/home/hulft/hulft/850G/bin
PATH=\$HULEXEP:$PATH
GOOGLE_APPLICATION_CREDENTIALS=/home/hulft/hulft/850G/hogehoge.json
HTTPS_PROXY=http://[プロキシサーバ]
```


# 実際に連携をやってみる(アップロード編)

## HULFTを起動し、集信管理情報を設定する。
HULFTを起動し、集信管理情報を設定します。
通常のHULFTでは集信ファイル名にはローカルのパスを指定しますが、クラウドストレージへの集信の場合、
ファイル名は「gs://バケット名/フォルダ名/ファイル」の形式で指定します。
![3skanri.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922358/f3b45b20-e78d-2452-feff-05dd39fb4740.png)
**クラウドストレージ用の集信管理情報には下記制限があるので注意しましょう。**

* 登録モード（TRANSMODE）― 「新規作成（N）」または「置き換え（R）」を指定してください。
* 異常時の処置（ABNORMAL）― 「復元（R）」を指定してください。
* 集信形態（RCVTYPE）― 「単一集信（S）」を指定してください。
* 世代管理（GENCTL）― 「しない（N）」を指定してください。

## 作成した管理情報で実際に転送してみる

作成した集信管理情報に対応する配信側HULFTからファイルを転送してみます。
転送したらまずは集信履歴を確認してみましょう。
![4srireki.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922358/a1e6b505-1f2d-29b7-4f0c-376722515b60.png)
完了コードは「0000-0000」ですので、正常に終了したようです。
GCS側にファイルが届いているかも確認してみましょう。
![5gcfile.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922358/d8c720a6-838a-bd2b-ee4b-470e1ec2917f.png)

集信管理情報で指定した「バケット/フォルダ/ファイル」のパスに無事ファイルができました。
バケット作成時に「test」フォルダはありませんでしたが、ない場合は勝手に作ってくれます。

ちなみに、GCSへはオンメモリ中継なので、集信側のHULFTにテンポラリファイル等は
作成されないので、途中で転送が失敗などしてもHULFTサーバにファイルが残ることは
ありません。

それでは今度はGCSからファイルを送る場合をやってみましょう。

# 実際に連携をやってみる(ダウンロード編)

## 配信管理情報を設定する
ダウンロードの場合は、GCSからHULFTにファイルをダウンロードしてきて、それを
HULFTで配信するという形ですので、配信管理情報を設定します。
アップロードのときと同様、クラウドストレージから配信する場合、
ファイル名は「gs://バケット名/フォルダ名/ファイル」の形式で指定します。
![6hkanri.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922358/526802c3-0873-7334-4b1a-8275fdfaa34f.png)
**クラウドストレージ用の配信管理情報には下記制限があるので注意しましょう。**

* 配信ファイルの扱い（CLEAR） ― 「K（保存）」を指定してください。

今回は、ちょうど先ほどアップロードの検証でGCSにファイルを作ったので、
それを今度はダウンロードしてみます。

## 実際に転送してみる

作成した配信管理情報でファイルを転送してみます。
転送したらまずは集信履歴を確認してみましょう。
![7srireki.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922358/72404da1-fd1d-c994-11e2-9d5754715146.png)
完了コードは「0000-0000」で、正常に終了しました。

ダウンロードの場合も同様にオンメモリ中継なので、配信側HULFTにテンポラリファイル等は
作成されず、HULFTサーバにファイルが残ったりはしません。


以上、**「HULFT8 Ver.8.5.0 クラウドストレージオプション」** を使用した連携について
設定イメージなどの参考にしていただければと思います。