HULFT10 Smart Proxyのクラウドトリガを使ってみた

## はじめに
こんにちは。すぎもんです:smile:

今回は、クラウドで発生したイベントをトリガーに、HULFT10 Smart ProxyとHULFTクラウドストレージオプションを使って、クラウド上のファイルを転送してみようと思います。

☆前回記事（環境構築）も参考にしてください
https://qiita.com/sugimon/items/f20294a677d69f87cac5


HULFT10 について紹介している公式サイトもあわせてご覧ください。
**■ HULFT10 製品紹介ページ**
https://www.hulft.com/software/hulft-10


**【公式】HULFT10 Smart Proxy ガイド**</font>
https://www.hulft.com/help/ja-jp/HULFT-V10/SPX-SUG/Content/Home_Top.htm
 
:::note warn
本資料は2024年9月開発中時点のリリース前モジュールでの環境構築ナレッジです。
設定内容等の細かい部分は変更になる可能性がある点、ご留意ください。
:::

# 前提条件
* 上図のEC2インスタンス（Linux）にNginxとHULFT10 Smart Proxyが稼働していること
* 上図のEC2インスタンス（Windows）に配信用と集信用のHULFTクラウドストレージオプションがそれぞれ稼働していること 

# 今回やること
Amazon S3へのファイルアップロードをトリガーにAWS LambdaがNginxとHULFT10 Smart Proxy経由で配信側HULFTにイベント通知し、配信側HULFTがS3からダウンロードしたファイルを集信側HULFTに転送します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/d47e7db3-07b1-41f1-051e-86da84d558fb.png)
※配信側HULFTから集信側HULFTへの転送でSmartProxyを通すのは必須ではありません。

# 設定の流れ
**１．S3バケット作成**
① バケットの作成
② フォルダの作成

**２．HULFT CSOの転送設定**
① 配信側HULFTの設定
② 集信側HULFTの設定
③ 環境変数の設定

**３．セキュリティーグループの設定**
① HULFT10 Smart Proxyのセキュリティーグループ設定
② HULFTのセキュリティーグループ設定

**４．Lambda関数作成**
① 関数の作成
② VPC 内のリソースへのアクセス許可
③ トリガーの設定

**５．クラウドトリガの動作確認**
① S3に転送ファイルをアップロード
② ファイル転送の確認

# １．S3バケット作成
**① バケットの作成**
Amazon S3で「バケットの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/2cbcdd4c-25fb-c5d5-61f5-cb2ed1028fb7.png)

バケット名を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ab623b05-8fa8-31d2-eff5-59d5764a4bd8.png)

「バケットを作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6d580e20-5fd6-8ddb-8fcd-3fc626704c80.png)

**②フォルダの作成**
ファイルを監視するフォルダを作成します。作成したバケットで「フォルダの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e40c6300-805a-065b-18be-8ca4dad458b9.png)

[フォルダ名]を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/36516cc1-b24e-a3d0-ff7f-7c323f6d4d68.png)

「フォルダの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/444a1aa8-20d4-9add-ddc2-a06a3f1df2b8.png)

# ２．HULFT CSOの転送設定
**①配信側HULFTの設定**
配信管理情報のファイル名にS3のファイル「s3://バケット名/フォルダ名/ファイル名」を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1c094d3b-9742-eafb-58f9-064cae23cd7f.png)

詳細ホスト情報に集信側HULFTのホスト情報を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/88e0837d-257e-3823-6cbb-ada800955fb7.png)

詳細ホスト情報の[PROXYサーバ]にHULFT10 Smart Proxyのサーバ名とポートNo.を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/a2736bf8-dcc1-1a49-b826-815ca9852651.png)

転送グループ情報に集信側HULFTのホスト名を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/f62d49e9-253c-b08c-a29b-5909f9757553.png)

**②集信側HULFTの設定**
集信管理情報のファイル名にローカルフォルダのファイルを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/72c3389f-56d7-e9e6-11e0-1424e1badb58.png)

詳細ホスト情報に配信側HULFTのホスト情報を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/b0386ac8-e39f-d904-7efa-0cf9e1f694bc.png)

**③環境変数の設定**
S3にアクセスするためにはHULFTが起動するホストで以下の環境変数の設定が必要です。
[access-key]と[secret-access-key]を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/75f6aafc-178e-4ce9-1105-c8529f8c9b97.png)

[default-region]を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/c821170f-5ffd-450e-252f-2a10d0d3f8c9.png)

# ３．セキュリティーグループの設定
**①HULFT10 Smart Proxyのセキュリティーグループ設定**
EC2インスタンス（Linux）のセキュリティグループを以下のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/c1860346-b764-5f7f-ff18-fd276dbe7448.png)
<font color="red">**①**</font>AWS Lambdaからイベント通知するためのルールを設定します。ソースにHULFT10 Smart ProxyのVPCまたはサブネットのCIDRを指定します。
<font color="red">**②**</font>HULFTからの配信要求するためのルールを設定します。ポート範囲に詳細ホスト情報のPROXYポートNo.を指定します。
<font color="red">**③**</font>EC2 Instance Connect エンドポイントを使用して接続するためのルールを設定します。ソースにエンドポイントのセキュリティーグループを指定します。

**②HULFTのセキュリティーグループ設定**
EC2インスタンス（Windows）のセキュリティグループを以下のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/93e84bcb-8cbc-f231-b84c-2b66e3a1bdf2.png)
<font color="red">**①**</font>送信側HULFTから配信要求するためのルールを設定します。ポート範囲に集信側HULFTの要求受付ポートNo.を指定します。
<font color="red">**②**</font>送信側HULFTから配信要求するためのルールを設定します。ポート範囲に集信側HULFTの集信ポートNo.を指定します。
<font color="red">**③**</font>HULFT10 Smart Proxyからイベント通知するためのルールを設定します。ポート範囲に送信側HULFTの要求受付ポートNo.を指定します。

# ４．Lambda関数作成
**①関数の作成**
Lambda⇒関数で「関数の作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/3492f43a-015a-c62b-4915-0a2cf13f99a3.png)

「一から作成」を選択し、[関数名]などの基本的な情報を設定し、「関数の作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/63c862b6-c3f1-3fa4-f8e9-fc403bb3e9e0.png)

HULFT10 Smart Proxyへイベント通知を行うコードを記載します。以下はPythonコードの例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/2576f413-54b8-13ae-96a8-02c71c105246.png)
変数urlのホスト名にはHULFT10 Smart ProxyのパブリックIPv4 DNSを指定します。
変数paramsとheadersにはそれぞれリクエストボディとリクエストヘッダーをJSON形式で指定します。
HULFT10 Smart ProxyのREST API仕様の詳細については[REST API仕様](https://dev.hulft.com/help/ja-jp/HULFT-V10/SPX-SUG/Content/HULFT_SUG_SPX/API/APISpec.htm?tocpath=3.%20Web%20API%E3%81%A7HULFT%E3%81%AB%E9%85%8D%E4%BF%A1%E8%A6%81%E6%B1%82%E3%81%BE%E3%81%9F%E3%81%AF%E9%80%81%E4%BF%A1%E8%A6%81%E6%B1%82%E3%82%92%E8%A1%8C%E3%81%86%7C3.2%20REST%20API%E4%BD%BF%E7%94%A8%E6%99%82%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%A8%E7%A2%BA%E8%AA%8D%7C_____1)を参照してください。 

**②VPC 内のリソースへのアクセス許可**
[設定]⇒[アクセス権限]の[ロール名]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6d247d8e-410e-78ff-a2dc-636c10bf1818.png)

[許可を追加]⇒[ポリシーをアタッチ]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/b6f3b5b1-d164-2cf6-1b83-69add7a9b912.png)

「AWSLambdaVPCAccessExecutionRole」を選択し、「許可を追加」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/9ec19a29-bdca-054c-40ea-f9ca560af5b7.png)

[設定]⇒[VPC]の「編集」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/3af54cf3-247e-6841-db7c-5b96247ed5dd.png)

HULFT10 Smart Proxyが稼働するEC2インスタンスのVPCとサブネットとセキュリティグループを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/eb6a421e-a987-dfa2-2c0c-df669ca0b02e.png)

「保存」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6f614c2b-1c9b-9963-e76c-b7edee757af5.png)

**③トリガーの設定**
作成した関数の[関数の概要]で「＋トリガーを追加」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/672e1046-9c85-9966-e47c-bf39399766fd.png)

[トリガーの設定]で「S3」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/4d532c16-4365-4604-31da-e4076966bda3.png)

[バケット]を指定し、[イベントタイプ]に「すべてのオブジェクト作成イベント」を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e7b68c90-7730-681f-785a-dd4674f5e621.png)

[プレフィックス]と[サフィックス]を設定し、「追加」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/9c473273-333a-7aae-3382-7d0cb5542a0f.png)

# ５．クラウドトリガの動作確認
**①S3に転送ファイルをアップロード**
赤枠内に転送ファイルをドラッグドロップし、 S3の監視対象フォルダにアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ba5c6c5f-21a4-e938-34f9-3cb35492b07a.png)

転送ファイルにチェックを入れて、「アップロード」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/b4e71ffc-2289-4b28-c3e2-8f2346a4e778.png)

**②ファイル転送の確認**
集信フォルダにファイルが転送されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/f8d63009-419f-5770-11d1-fa52f8f0e062.png)

配信状況一覧で完了コードが「000000(00000)」になっていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/b49d59cc-6823-7339-5302-1e6e5498ea55.png)

# エラー時の確認ポイントについて
**①HULFTの配信状況一覧にレコードが出力されない場合**
HULFTまでイベント通知が届いていないことが考えられます。
AWS Lambdaのコードソースで「Test」を押下し、実行結果を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/c1f6bac2-03e3-08e3-a2f6-7566abdc0dcd.png)
[error code]と[error reason]の内容を確認します。
* 400 Bad Requestの場合はリクエストパラメータに不備がないか確認します。
* 502 Bad Gatewayの場合はHULFT10 Smart Proxyのプロセスが起動しているか確認します。

その他、HULFT10 Smart ProxyからのレスポンスについてはREST API仕様の[Response Interface](https://dev.hulft.com/help/ja-jp/HULFT-V10/SPX-SUG/Content/HULFT_SUG_SPX/API/APISpec.htm?tocpath=3.%20Web%20API%E3%81%A7HULFT%E3%81%AB%E9%85%8D%E4%BF%A1%E8%A6%81%E6%B1%82%E3%81%BE%E3%81%9F%E3%81%AF%E9%80%81%E4%BF%A1%E8%A6%81%E6%B1%82%E3%82%92%E8%A1%8C%E3%81%86%7C3.2%20REST%20API%E4%BD%BF%E7%94%A8%E6%99%82%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%A8%E7%A2%BA%E8%AA%8D%7C_____1#ResponseInterface)を確認します。

**②HULFTの配信状況一覧でエラーとなった場合**
配信側HULFTの配信状況一覧を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/3c3d007f-dbac-5aa8-1b35-984ecb0eb527.png)
完了コードの内容を確認します。
* 完了コードの下3桁が560で括弧内の詳細コードが1104の場合、環境変数で設定した[access-key]に誤りがないか確認します。

その他、完了コードの詳細については[HULFTクラウドストレージオプションマニュアル](https://www.hulft.com/help/ja-jp/HULFT-V8/COM-CLD/Content/HULFT_CLOUD/ERR_Messages/StatusCode.htm)を確認します。

# 最後に
皆さん、いかがでしたでしょうか。
今回は、Amazon Eventを使って、AWS S3のファイルをLambdaを使ってトリガ検知し、オンプレ転送してみました。これまでできなかった、クラウド側のイベントを起因とするファイル連携を是非試してみてください！

このブログでは、今後も様々なTopics記事や接続検証等、皆さんの役に立つような記事を投稿していきたいと思います！
これからも是非チェックいただき、宜しければフォローをお願いします。
最後まで読んでいただきありがとうございました！それでは、また！