SFTP サーバーへの動的な接続の例 - Mule 4

多くのインテグレーションでは、次のように特定の条件に応じて異なるサーバーへの接続が必要です。

  • 請求書を発行する部署に応じて異なる請求書ストレージサーバーに接続する。

  • マルチテナントのユースケースなど、インテグレーションの対象に応じて異なるサーバーに接続する。

こうしたユースケースに対応するため、SFTP 用 Anypoint Connector (SFTP Connector) グローバル設定要素では、これらの条件を評価して適切なサーバーに接続するパラメーター式がサポートされています。

次の例は、複数のサーバーに動的に接続するための SFTP Connector の設定方法を示しています。

  1. HTTP の ​[Listener (リスナー)]​ ソースでは、HTTP 経由で投稿されるランダムコンテンツを読み取ってフローを開始します。

  2. File Connector の ​Read​ 操作では、​host​、​user​、​port​ などの列で構成されるランダムな SFTP 宛先セットを含む受信者 CSV ファイルを読み込みます。

  3. DataWeave 変換は、コンテンツをマップして、CSV ファイルを分割します。

  4. [For Each]​ コンポーネントと SFTP の ​Write​ 操作では、コンテンツを各 SFTP 宛先に書き込みます。

    [For Each]​ の反復ごとに、SFTP グローバル設定要素で設定された式が異なる値に解決され、サーバーごとに異なる接続が確立されます。

この例をテストするには、Mule アプリケーションを作成して、curl コマンドを使用してアプリケーションを実行およびテストします。

SFTP サーバーへの動的な接続
Figure 1. SFTP サーバーへの動的な接続のフロー

Mule アプリケーションの作成

Mule フローを作成する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[HTTP] > [Listener]​ を選択します。

  2. [HTTP] の [Listener (リスナー)]​ を Studio キャンバスにドラッグします。

  3. [HTTP Listener (HTTP リスナー)]​ 設定画面で、必要に応じて ​[Display Name (表示名)]​ 項目の値を変更します。

  4. [Path (パス)]​ 項目を ​/multitenant​ に設定します。

  5. [Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックして、アプリケーション内の HTTP Listener のすべてのインスタンスで使用できるグローバル要素を設定します。

  6. [General (一般)]​ タブで、次の項目を設定します。

    • Host (ホスト)​: All Interfaces [0.0.0.0] (default)

    • Port (ポート)​: 8081

  7. [OK]​ をクリックします。

  8. [Set Variable]​ コンポーネントを ​[HTTP] の [Listener (リスナー)]​ ソースの右にドラッグします。

  9. [Name (名前)]​ 項目を ​content​、​[Value (値)]​ 項目を ​#[payload]​ に設定します。

  10. File Connector の ​[Read]​ 操作を ​[Set Variable]​ コンポーネントの右にドラッグします。

  11. [File Path (ファイルパス)]​ 項目を ​recipients.csv​ に設定します。
    これにより、​host​、​user​、​port​ などの列で構成されるランダムな SFTP 宛先セットを含む CSV ファイルが読み取られます。

  12. [Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックして、アプリケーション内の File Connector のすべてのインスタンスで使用できるグローバル要素を設定します。

  13. デフォルト設定を受け入れ、​[OK]​ をクリックします。

  14. Read​ 操作の ​[MIME Type (MIME タイプ)]​ タブの ​[MIME Type (MIME タイプ)]​ 項目で ​application/csv​ を選択します。

追加コンポーネントおよび操作を設定する

コンポーネントおよび操作を追加して、Mule アプリケーションの作成を続けます。

  1. Studio で、​[Transform Message]​ コンポーネントを ​[Read]​ 操作の右にドラッグします。

  2. コンポーネントの ​[Output (出力)]​ セクションで、次の DataWeave コードを追加して、CSV ファイルの列にマップします。

    DataWeave スクリプト:
    %dw 2.0
    output application/java
    ---
    payload map using (row = $) {
       host: row.Host,
       user: row.User,
       password: row.Password}
    dataweave
  3. [For Each]​ コンポーネントを ​[Transform Message]​ コンポーネントの右にドラッグします。

  4. SFTP の ​[Write]​ 操作を ​[For Each]​ コンポーネントにドラッグします。
    For Each の反復ごとに、​Write​ 操作は、コンテンツを各 SFTP 宛先に書き込みます。

  5. [Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックして、アプリケーション内の SFTP の Write 操作のすべてのインスタンスで使用できるグローバル要素を設定し、次の項目を設定します。

    • Host (ホスト)​: #[payload.host]

    • Username (ユーザー名)​: #[payload.username]

    • Password (パスワード)​: #[payload.password]

  6. [OK]​ をクリックします。

  7. 設定画面で、​[Path (パス)]​ 項目を ​demo.txt​ に設定します。

  8. [Content (コンテンツ)]​ 項目を ​payload​ に設定します。

  9. [Set Payload]​ コンポーネントを ​[For Each]​ コンポーネントの右にドラッグします。

  10. [Value (値)]​ 項目を ​Multicast Ok​ に設定します。

Mule アプリケーションを実行およびテストする

Mule アプリケーションを作成したら、それを実行してテストします。

  1. Studio で、Mule アプリケーションを保存します。

  2. Package Explorer​ でプロジェクト名をクリックし、​[Run (実行)]​ > ​[Run As (別のユーザーとして実行)]​ > ​[Mule Application (Mule アプリケーション)]​ をクリックします。

  3. ブラウザーを開き、​http://0.0.0.0:8081/multitenant​ と入力します。

Mule 4 の動作に関する注意事項 (Mule 3 ユーザー向け):

  • HTTP Listener ソースを通じて投稿された情報は、各 SFTP サイトに複数回書き込まれます。

    リスナーで​『反復可能ストリーム機能』​が使用されているため、ストリームを複数回コンシュームすることについて心配は無用です。

  • For Each コンポーネントは CSV ファイルの各行を自動的に処理します。

    Mule 3 では、最初に CSV ファイルを Java 構造体に変換する必要がありましたが、Mule 4 は Java に依存しないため、変換せずに動作するようになりました。

ファイルを読み取る場合やリストする場合に、ファイルのメタデータ (たとえば、ファイル名、フルパス、サイズ、タイムスタンプ) を知りたいと考える場合もあります。コネクタは Mule メッセージ属性を使用してこの情報にアクセスします。

SFTP サーバーに動的に接続するための XML

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。