SFTP

SFTP コネクタを使用すると、SFTP サーバーに接続してファイル転送オペレーションを実行できます。

始める前に

Google Cloud プロジェクトで次のタスクを行います。

  • ネットワーク接続が設定されていることを確認します。詳細については、ネットワーク接続をご覧ください。
  • コネクタを構成するユーザーに roles/connectors.admin IAM ロールを付与します。
  • コネクタに使用するサービス アカウントに、roles/secretmanager.viewer と roles/secretmanager.secretAccessor の IAM ロールを付与します。サービス アカウントがない場合は、サービス アカウントを作成する必要があります。コネクタとサービス アカウントは同じプロジェクトに属している必要があります。
  • secretmanager.googleapis.com(Secret Manager API)と connectors.googleapis.com(Connectors API)を有効にします。詳細については、サービスを有効にするをご覧ください。

SFTP 接続を作成する

接続はデータソースに特有です。つまり、多数のデータソースがある場合は、データソースごとに別々の接続を作成する必要があります。接続を作成する手順は次のとおりです。

  1. Cloud コンソールで、[Integration Connectors] > [接続] ページに移動し、Google Cloud プロジェクトを選択または作成します。

    [接続] ページに移動

  2. [+ 新規作成] をクリックして [接続の作成] ページを開きます。
  3. [ロケーション] セクションで、[リージョン] リストからロケーションを選択し、[次へ] をクリックします。

    サポートされているすべてのリージョンのリストについては、ロケーションをご覧ください。

  4. [接続の詳細] セクションで、次の操作を行います。
    1. [コネクタ] フィールドで、[SFTP] を選択します。
    2. [コネクタのバージョン] フィールドで、目的のバージョンを選択します。
    3. [接続名] フィールドに、接続インスタンスの名前を入力します。接続名には、英小文字、数字、ハイフンを使用できます。名前は英字で始まり、英字または数字で終わる必要があります。名前は 49 文字を超えないようにしてください。
    4. 必要に応じて、接続インスタンスの [説明] を入力します。
    5. 必要に応じて、Cloud Logging を有効にして、ログレベルを選択します。デフォルトのログレベルは Error に設定されています。
    6. [サービス アカウント] フィールドで、必要なロールを持つアカウントを選択します。
    7. (省略可)接続ノードの設定を構成します。
      • ノードの最小数: 接続ノードの最小数を入力します。
      • ノードの最大数: 接続ノードの最大数を入力します。

      ノードは、トランザクションを処理する接続の単位(またはレプリカ)です。1 つの接続でより多くのトランザクションを処理するには、より多くのノードが必要になります。逆に、より少ないトランザクションを処理するには、より少ないノードが必要になります。ノードがコネクタの料金に与える影響については、 接続ノードの料金をご覧ください。値を入力しない場合は、デフォルトで最小ノード数は 2 に設定され(可用性を高めるため)、最大ノード数は 50 に設定されます。

    8. (省略可)[リモートパス] フィールドに、エンティティ オペレーションを実行する SFTP サーバーのフォルダパス(List、Create、Update、Delete など)を入力します。
    9. ルートフォルダのエンティティ(ファイルまたはフォルダ)またはルートフォルダの直接の子フォルダにアクセスする場合は、このフィールドに値を設定する必要はありません。ただし、ルートフォルダから深さ 2 レベル以上にあるネストされたエンティティにアクセスする場合は、このフィールドの値を、アクセスするエンティティを含むフォルダのベースパスに設定する必要があります。たとえば、/folder_A/folder_B/folder_C/test.png ファイルにアクセスする場合は、リモートパスを /folder_A/folder_B/folder_C に設定する必要があります。

    10. 必要に応じて、[+ ラベルを追加] をクリックして Key-Value ペアの形式でラベルを接続に追加します。
    11. [次へ] をクリックします。
  5. [宛先] セクションに、接続するリモートホスト(バックエンド システム)の詳細を入力し、[次へ] をクリックします。
  6. [送信先のタイプ] フィールドで、目的のタイプを選択します。

    • 宛先のホスト名または IP アドレスを指定するには、[ホストアドレス] を選択し、[ホスト 1] フィールドにアドレスを入力します。
    • プライベート接続を確立するには、[エンドポイント アタッチメント] を選択します。[エンドポイント アタッチメント] リストで、バックエンド システム用に作成されたエンドポイント アタッチメントを選択します。

    セキュリティをさらに強化してバックエンドシステムへのパブリック接続を確立する場合は、接続用の静的アウトバウンド IP アドレスの構成を検討してから、特定の静的 IP アドレスのみを許可リストに登録するようファイアウォール ルールを構成します。

  7. [認証] セクションで、[認証タイプ] を選択し、関連する詳細を入力して、[次へ] をクリックします。

    SFTP 接続でサポートされる認証タイプは次のとおりです。

    • ユーザー名とパスワードを指定する
    • SSH_PUBLIC_KEY

    これらの認証タイプの構成方法については、認証を構成するをご覧ください。

  8. 接続と認証の詳細を確認し、[作成] をクリックします。

認証を構成する

使用する認証に基づいて詳細を入力します。

  • ユーザー名とパスワード
    • ユーザー名: 接続に使用する SFTP ユーザー名。
    • パスワード: SFTP ユーザー名に関連付けられたパスワードを含む Secret Manager の Secret。
  • SSH_PUBLIC_KEY
    • ユーザー名: 認証に使用される SFTP ユーザー アカウント。
    • SSH Private Key: SSH 認証用の秘密鍵。
    • SSH 秘密鍵パスワード: 秘密鍵を保護するパスフレーズまたはパスワード(ある場合)。
    • SSH 秘密鍵タイプ: 秘密鍵の形式。

インテグレーションで SFTP 接続を使用する

接続を作成すると、Apigee Integration と Application Integration の両方で使用できるようになります。この接続は、コネクタタスクを介して統合で使用できます。

  • Apigee Integration で Connectors タスクを作成して使用する方法については、Connectors タスクをご覧ください。
  • Application Integration で Connectors タスクを作成して使用する方法については、Connectors タスクをご覧ください。

操作

このセクションでは、コネクタでサポートされているアクションを一覧表示します。アクションの構成方法については、アクションの例をご覧ください。

Upload アクション

次の表では、Upload アクションの入力パラメータを示します。

パラメータ名 データ型 必須 説明
Content 文字列 × ファイルとしてアップロードするコンテンツ。
ContentBytes 文字列 × ファイルとしてアップロードするバイト コンテンツ(Base64 文字列として)。バイナリデータをアップロードするために使用します。
HasBytes ブール値 × コンテンツをバイトとしてアップロードするかどうかを指定します。デフォルト値は false です。
RemoteFile 文字列 ○ リモートホスト上のファイル名。
上書き ブール値 × リモート ファイルを上書きするかどうかを指定します。デフォルト値は false です。

Upload アクションの構成例については、例をご覧ください。

ダウンロード アクション

次の表では、Download アクションの入力パラメータを示します。

パラメータ名 データ型 必須 説明
RemoteFile 文字列 ○ リモートホスト上のファイル名。* ワイルドカード文字は使用できますが、他のワイルドカード文字はサポートされていません。詳しくは、複数のファイルをダウンロードするをご覧ください。
HasBytes ブール値 × コンテンツをバイトとしてダウンロードするかどうかを指定します。デフォルト値は false です。

Download アクションの構成例については、例をご覧ください。

MoveFile アクション

次の表では、MoveFile アクションの入力パラメータを示します。

パラメータ名 データ型 必須 説明
RemoteFile 文字列 ○ 移動するリモート ファイルのパス
DestinationPath 文字列 ○ ファイルの移動先の新しいパス。

MoveFile アクションの構成例については、例をご覧ください。

RenameFile アクション

次の表では、RenameFile アクションの入力パラメータを示します。

パラメータ名 データ型 必須 説明
RemoteFile 文字列 ○ 名前を変更するリモート ファイルのパスと名前。
NewFileName 文字列 ○ リモート ファイルの新しい名前。

RenameFile アクションの構成例については、例をご覧ください。

例

このセクションでは、このコネクタでエンティティ オペレーションとアクションの一部を実行する方法について説明します。この例では、次のオペレーションについて説明します。

  • ルート ディレクトリ内のすべてのファイルの一覧表示
  • ディレクトリ内のパターンに一致するファイルの一覧表示
  • ファイルの移動
  • ファイルの名前変更
  • ファイルの削除
  • ASCII テキスト ファイルのアップロード
  • バイナリ ファイルのアップロード
  • ASCII テキスト ファイルのダウンロード
  • バイナリ ファイルのダウンロード
  • 複数のファイルをダウンロードする

次の表では、コネクタのタスクのサンプル シナリオと対応する構成を示します。

タスク サンプル コマンド 構成
ルート ディレクトリ内のすべてのファイルの一覧表示 ls /
  1. [Configure connector task] ダイアログで、[Entities] をクリックします。
  2. Root エンティティを選択し、List オペレーションを選択します。
  3. [完了] をクリックします。
ディレクトリ内の .csv ファイルを一覧表示する ls /tmp/*.csv
  1. [Configure connector task] ダイアログで、[Entities] をクリックします。
  2. Entity リストからベース ディレクトリ(/tmp)を選択します。
  3. [List] オペレーションを選択してから、[完了] をクリックします。
  4. フィルタ句を設定します。句を設定するには、[コネクタ] タスクの [タスク入力] セクションで [filterClause] をクリックし、[デフォルト値] に [FilePath LIKE '/tmp/%.csv'] を入力します。
ファイルの移動 mv /tmp/dir_A/hello_world.txt /dir_B/dir_C/
  1. [Configure connector task] ダイアログで、[Actions] をクリックします。
  2. [MoveFile] アクションを選択してから、[完了] をクリックします。
  3. [コネクタ] タスクの [タスク入力] セクションで、connectorInputPayload をクリックし、Default Valueフィールドに次のような値を入力します。
    {
    "RemoteFile": "/tmp/dir_A/hello_world.txt",
    "DestinationPath": "/dir_B/dir_C/"
    }

この例では、/tmp/dir_A/hello_world.txt ファイルを /dir_B/dir_C/ ディレクトリに移動します。この例を実行すると、コネクタ タスクの connectorOutputPayload 出力変数で次のようなレスポンスが返されます。

[{
"Success":"true"
}]
ファイルの名前変更 mv /tmp/hello_world.txt /tmp/hello_world_new.txt
  1. [Configure connector task] ダイアログで、[Actions] をクリックします。
  2. [RenameFile] アクションを選択してから、[完了] をクリックします。
  3. [コネクタ] タスクの [タスク入力] セクションで、connectorInputPayload をクリックし、Default Valueフィールドに次のような値を入力します。
    {
    "RemoteFile": "/tmp/hello_world.txt",
    "NewFilename": "hello_world_new.txt"
    }

この例では、hello_world.txt ファイルの名前を hello_world_new.txt に変更します。この例を実行すると、コネクタ タスクの connectorOutputPayload 出力変数で次のようなレスポンスが返されます。

[{
"Success":"true"
}]
ファイルの削除 rm /tmp/myfile.csv
  1. [Configure connector task] ダイアログで、[Entities] をクリックします。
  2. Entity リストから、移動するファイルを含むベース ディレクトリを選択します。
  3. [Delete] オペレーションを選択してから、[完了] をクリックします。
  4. エンティティ ID をファイルのフルパスに設定します。エンティティ ID を設定するには、[コネクタ] タスクの [タスク入力] セクションで [entityId] をクリックし、[デフォルト値] に /tmp/myfile.csv を入力します。

    [entityId] を指定する代わりに、[filterClause] を FilePath LIKE '/tmp/myfile.csv' に設定することもできます。

ASCII テキスト ファイルのアップロード put file_1.txt /tmp/file_1.txt
  1. [Configure connector task] ダイアログで、[Actions] をクリックします。
  2. [Upload] アクションを選択してから、[完了] をクリックします。
  3. [コネクタ] タスクの [タスク入力] セクションで、connectorInputPayload をクリックし、Default Valueフィールドに次のように入力します。
    {
      "Content": "This is a sample text!\r\n",
      "RemoteFile": "/tmp/file_1.txt",
      "Overwrite": true
    }
  4. このサンプルでは、SFTP サーバーの /tmp ディレクトリに、This is a sample text! のコンテンツを含む file_1.txt ファイルを作成します。また、Overwrite 属性の値が true であるため、同じ名前の既存のファイルは上書きされます。

    Overwrite 属性の設定は省略可能です。デフォルト値は false です。

バイナリ ファイルのアップロード put image_1.png /tmp/image_1.png バイナリ コンテンツをアップロードするには、まずコンテンツを Base64 形式でエンコードする必要があります。任意のツールを選択して、コンテンツをエンコードします。コンテンツをエンコードする手順は、このドキュメントの対象外です。コンテンツを Base64 文字列として取得したら、次の手順を行います。
  1. [Configure connector task] ダイアログで、[Actions] をクリックします。
  2. [Upload] アクションを選択してから、[完了] をクリックします。
  3. [コネクタ] タスクの [タスク入力] セクションで、connectorInputPayload をクリックし、Default Valueフィールドに次のように入力します。
    {
      "ContentBytes": "SGVsbG8gd29ybGQ=",
      "RemoteFile": "/tmp/image_1.png",
      "Overwrite": true,
      "HasBytes": true
    }
  4. このサンプルでは、ContentBytes フィールドで指定されたコンテンツを含む image_1.png ファイルを作成します。ファイルは SFTP サーバーの /tmp ディレクトリに作成されます。また、Overwrite 属性の値が true であるため、同じ名前の既存のファイルは上書きされます。

    Overwrite 属性の設定は省略可能です。デフォルト値は false です。

ASCII テキスト ファイルのダウンロード get /tmp/myfile.txt
  1. [Configure connector task] ダイアログで、[Actions] をクリックします。
  2. [Download] アクションを選択してから、[完了] をクリックします。
  3. [コネクタ] タスクの [タスク出力] セクションで、connectorInputPayload をクリックし、Default Valueフィールドに次のように入力します。
    {
    "RemoteFile": "/tmp/myfile.txt"
    }

ダウンロードしたファイルのコンテンツは、Connectors タスクの connectorOutputPayload レスポンス パラメータの Content フィールドで文字列として利用できます。

バイナリ ファイルのダウンロード get /tmp/myfile.png
  1. [Configure connector task] ダイアログで、[Actions] をクリックします。
  2. [Download] アクションを選択してから、[完了] をクリックします。
  3. [コネクタ] タスクの [タスク出力] セクションで、connectorInputPayload をクリックし、Default Valueフィールドに次のように入力します。
    {
    "RemoteFile": "/tmp/myfile.png",
    "HasBytes" : true
    }

ダウンロードしたファイルのコンテンツは、Connectors タスクの connectorOutputPayload レスポンス パラメータの ContentBytes フィールドで Base64 エンコード文字列として利用できます。

複数のファイルをダウンロードする
  1. [Configure connector task] ダイアログで、[Actions] をクリックします。
  2. [Download] アクションを選択してから、[完了] をクリックします。
  3. [コネクタ] タスクの [タスク出力] セクションで、connectorInputPayload をクリックし、Default Valueフィールドに次のように入力します。
    {
    "RemoteFile": "/tmp/myfile*.txt"
    }

システムの上限

SFTP コネクタは、ノードごとに 1 秒あたり 1 件のトランザクションを処理することができ、この上限を超えるトランザクションはすべてスロットルされます。デフォルトでは、Integration Connectors は、接続に 2 つのノードを割り当てます(可用性を高めるため)。

Integration Connectors に適用される上限の詳細については、上限をご覧ください。

Terraform を使用して接続を作成する

Terraform リソースを使用して、新しい接続を作成できます。

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

接続作成用の Terraform テンプレートのサンプルを表示するには、サンプル テンプレートをご覧ください。

Terraform を使用してこの接続を作成する場合は、Terraform 構成ファイルで次の変数を設定する必要があります。

パラメータ名 データ型 必須 説明
remote_path STRING False SFTP サーバーの現在のパス。

ペイロード用の JSON スキーマ

SFTP 接続のすべてのエンティティ オブジェクトには、事前定義された JSON スキーマがあります。SFTP 接続のエンティティ オブジェクトは、次の JSON スキーマを使用します。

    {
      "type": "object",
      "properties": {
        "FilePath": {
          "type": "string",
          "readOnly": false
        },
        "Filename": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": false,
          "description": "The name of the file or directory."
        },
        "FileSize": {
          "type": [
            "number",
            "null"
          ],
          "readOnly": false,
          "description": "The size of the file."
        },
        "LastModified": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": false
        },
        "IsDirectory": {
          "type": [
            "boolean",
            "null"
          ],
          "readOnly": false
        },
        "Permissions": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": false
        },
        "Owner": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": false
        },
        "OwnerId": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": false
        },
        "Group": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": false
        },
        "GroupId": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": false
        }
      }
    }
  

Google Cloud コミュニティの助けを借りる

Google Cloud コミュニティの Cloud フォーラムで質問を投稿したり、このコネクタについてディスカッションしたりできます。

次のステップ