SFTP コネクタについて

SFTP コネクタは、SFTP サーバにあるファイルとフォルダへのアクセスを提供します。この主な機能は次のとおりです。

  • ファイルの読み取りやディレクトリの内容の完全なリストの作成をオンデマンドで実行する機能。

  • ディレクトリの作成、ファイルのコピー、移動、名前変更、削除など、一般的な SFTP 操作のサポート。

  • ファイルのロックのサポート。

  • ファイル一致機能。

  • ファイルコネクタおよび SFTP コネクタと完全に一致する設計。これらすべてのコネクタで同じ一連の操作を使用でき、動作も同じです。

SFTP サーバへの接続

次の例のように、sftp:config 要素を使用して接続をセットアップします。

<sftp:config name="sftp">
  <sftp:connection username="anonymous" password="password"
    host="localhost" port="${ftpPort}"
    workingDir="${workingDir}"/>
</sftp:config>

workingDir により、このコネクタで使用するすべての相対パスのルートとして扱われるディレクトリへのパスが指定されます。ディレクトリを指定しない場合、リモートサーバのデフォルトが作業ディレクトリとなります。

usernamepasswordhostport の各属性は一目瞭然です。

プロキシを介した SFTP サーバへの接続

プロキシを介して接続するには、次のような設定を使用します。

<ftp:config name="sftp">
  <ftp:sftp-connection username="muletest1" password="muletest1"
    host="127.0.0.100" port="${SFTP_PORT}" workingDir="${workingDir}">
      <ftp:sftp-proxy-config host="localhost" port="${proxyPort}" protocol="HTTP"/>
  </ftp:sftp-connection>
</ftp:config>

プロトコルには、HTTP、SOCKS4、または SOCKS5 を使用できます。

動的な SFTP 接続

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

たとえば、次のような場合です。

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

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

こうしたユースケースに対応するため、config 要素は式をサポートし、接続パラメータがこうした条件を評価して適切なサーバに接続できるようにしています。

動的な SFTP 接続の例

次の例は、以下に該当する動的マルチキャストアプリケーションの例を示しています。

  1. hostusernamepassword が式になっているコネクタの config を定義する。

  2. HTTP 経由でコンテンツを投稿するフローを記述する。

  3. ファイルコネクタを使用して、ホスト、ユーザ、ポートなどの列で構成されるランダムな SFTP 宛先セットを含む CSV ファイルを読み取る。

  4. <foreach> コンポーネントを使用して、CSV ファイルの各行を反復処理する。

  5. <foreach> を繰り返すたびに、コネクタ config の各式を異なる値に解決し、それぞれのサーバへの異なる接続を確立する。

<sftp:config name="FTP_Config" doc:name="FTP Config" >

<sftp:sftp-connection host="#[payload.host]" username="#[payload.user]" password="#[payload.password]" />

</sftp:config>

<flow name="streaming-multitenantFlow" >
<http:listener config-ref="HTTP_Listener_config" path="/multitenant"
doc:name="Listener" />
<set-variable variableName="content" value="#[payload]" doc:name="Variable" />
<file:read config-ref="File_Config" path="recipients.csv" doc:name="Read"
 outputMimeType="application/csv" />
<ee:transform doc:name="Transform Message">
<ee:message>

<ee:set-payload ><![CDATA[%dw 2.0
output application/java
—
payload map using (row = $) {
   host: row.Host,
   user: row.User,
   password: row.Password
}]]>

  </ee:set-payload>
  </ee:message>
  </ee:transform>
  <foreach doc:name="For Each" >
    <sftp:write config-ref="SFTP_Config" doc:name="Write" path="demo.txt">
    <sftp:content >#[content]</sftp:content>
  </sftp:write>
</foreach>
<set-payload doc:name="Set Payload" value="Multicast OK"/>
</flow>
  • このサンプルアプリケーションは、host (ホスト)、username (ユーザ名)、password (パスワード) が式である SFTP 設定を定義します。

  • ランダムコンテンツが投稿されるフローを使用します。

  • ファイルコネクタを使用して受信者ファイルを読み込みます。このファイルは、ランダムな SFTP 宛先のセットが含まれる CSV ファイルです。

  • CSV ファイルを分割する DataWeave 変換があります。

  • このアプリケーションでは foreach 要素を使用してコンテンツを各 SFTP 宛先に書き込みます。

  • foreach 反復処理を実行するたびに、SFTP 設定の各式が異なる値に解決され、サーバごとに異なる接続を確立します。

例: SFTP 書き込み

次の例は、SFTP の Write 操作を使用するという点を除けば、前述の例とまったく同じです。

<sftp:config name="ftp"> (1)
  <sftp:connection host="#[payload.host]" username="#[payload.user]" password="#[payload.password]" />
</sftp:config>

<flow name="ftpMultitenant" >
  <http:listener config-ref="HTTP_Listener_config" path="/multitenant"/> (2)
  <set-variable variableName="content" value="#[payload]" />
  <file:read path="recipients.csv" outputMimeType="application/csv" /> (3)

  <foreach> (4)
    <sftp:write path="demo.txt" config-ref="ftp"> (5)
      <sftp:content>#[vars.content]</sftp:content>
    </sftp:write>
  </foreach>

  <set-payload value="Multicast OK"/>
</flow>

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

  • 上の例では、ファイルコネクタを使用してフローの途中でファイルを読み取ります。<http:listener> コンポーネントを通じて投稿された情報は、各 SFTP サイトに複数回書き込まれます。コンポーネントで反復可能ストリーム機能が使用されているため、ストリームを複数回消費することについて心配は無用です。

  • <foreach> コンポーネントは CSV ファイルの各行を自動的に処理します。Mule 3 では、最初に CSV ファイルを Java 構造体に変換する必要がありましたが、Mule 4 は Java に依存しないため、変換せずに動作するようになりました。

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

表現

Mule 4 では、ペイロードと属性のペアを使用するメッセージ構造が提供されます。ペイロードは Mule 3 と同じですが、Mule 4 ではデータがさまざまな場所に移動します。つまり、ペイロードはファイルの内容です。属性は、ペイロードに関するメタデータと、ファイル名、パス、サイズ、タイムスタンプなどの情報を含むオブジェクトを提供します。FTP コネクタおよび SFTP コネクタの場合、これらの属性は file attributes として知られています。

Mule メッセージには、エンコーディングおよび MIME タイプの概念が含まれます。これらは、ペイロードを表現する形式を記述するために使用されます。ファイル属性は、ファイルのエンコーディングおよび MIME タイプを記述します。

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub