Azure Data Factory を使用して FTP サーバーからデータを移動する

Note

この記事は、Data Factory のバージョン 1 に適用されます。 現在のバージョンの Data Factory サービスを使用している場合は、V2 の FTP コネクタに関するページを参照してください。

この記事では、Azure Data Factory のコピー アクティビティを使って、FTP サーバーからデータを移動する方法について説明します。 この記事は、コピー アクティビティによるデータ移動の一般的な概要について説明している、データ移動アクティビティに関する記事に基づいています。

FTP サーバーから、サポートされている任意のシンク データ ストアにデータをコピーできます。 コピー アクティビティによってシンクとしてサポートされているデータ ストアの一覧については、サポートされているデータ ストアの表をご覧ください。 データ ファクトリは、他のデータ ストアから FTP サーバーへのデータの移動ではなく、FTP サーバーから他のデータ ストアへのデータの移動のみをサポートします。 オンプレミスとクラウド FTP サーバーの両方をサポートします。

Note

コピー アクティビティでは、コピー先にコピーされた後にソース ファイルが削除されることはありません。 コピー後にソース ファイルを削除する必要がある場合、カスタム アクティビティを作成してファイルを削除し、パイプラインのアクティビティを使用します。

接続性の確保

データをオンプレミスの FTP サーバーからクラウド データ ストア (例: Azure Blob ストレージ) に移動する場合は、Data Management Gateway をインストールして使用します。 Data Management Gateway はオンプレミスのコンピューターにインストールされたクライアント エージェントで、これにより、クラウド サービスはオンプレミスのリソースに接続できます。 詳細については、データ管理ゲートウェイをご覧ください。 ゲートウェイの設定とその使用に関する手順は、オンプレミスの場所とクラウド間のデータ移動を参照してください。 サーバーが Azure IaaS 仮想マシン (VM) 上にある場合でも、FTP サーバーに接続するためにゲートウェイを使用します。

FTP サーバーとして、同じオンプレミスのコンピューターまたは IaaS VM にゲートウェイをインストールすることが可能です。 ただし、リソースの競合を防ぎ、パフォーマンスの向上を図るために、別のコンピューターまたは IaaS VM にゲートウェイをインストールすることをお勧めします。 別のコンピューターにゲートウェイをインストールすると、そのコンピューターが FTP サーバーにアクセスできるようになります。

はじめに

さまざまなツールまたは API を使用して、FTP ソースからデータを移動するコピー アクティビティを含むパイプラインを作成できます。

パイプラインを作成する最も簡単な方法は、Data Factory コピー ウィザードを使うことです。 「チュートリアル:コピー ウィザードを使用してパイプラインを作成する」で、簡単なチュートリアルをご覧いただけます。

また、次のツールを使用してパイプラインを作成することもできます。Visual StudioPowerShellAzure Resource Manager テンプレート.NET APIREST API。 コピー アクティビティを含むパイプラインを作成するための詳細な手順については、コピー アクティビティのチュートリアルをご覧ください。

ツールと API のいずれを使用する場合も、次の手順を実行して、ソース データ ストアからシンク データ ストアにデータを移動するパイプラインを作成します。

  1. リンクされたサービスを作成し、入力データ ストアと出力データ ストアをデータ ファクトリにリンクします。
  2. コピー操作用の入力データと出力データを表すデータセットを作成します。
  3. 入力としてのデータセットと出力としてのデータセットを受け取るコピー アクティビティを含むパイプラインを作成します。

ウィザードを使用すると、Data Factory エンティティ (リンクされたサービス、データセット、パイプライン) に関する JSON の定義が自動的に作成されます。 (.NET API を除く) ツールまたは API を使う場合は、JSON 形式でこれらの Data Factory エンティティを定義します。 FTP データ ストアからデータをコピーするために使用される Data Factory エンティティ用の JSON 定義のサンプルについては、この記事の「JSON の使用例: FTP サーバーから Azure BLOB にデータをコピーする」セクションを参照してください。

Note

サポートされているファイルと使用する圧縮形式に関する詳細は、Azure Data Factory のファイルおよび圧縮形式を参照してください。

次のセクションでは、FTP に固有の Data Factory エンティティの定義に使用される JSON プロパティについて詳しく説明します。

リンクされたサービスのプロパティ

次の表は、FTP リンク サービスに固有の JSON 要素について説明しています。

プロパティ 説明 必須 Default
type FtpServer に設定します。 はい  
host FTP サーバーの名前または IP アドレスを指定します。 はい  
authenticationType 認証の種類を指定します。 はい Basic、Anonymous
username FTP サーバーへのアクセスを持つユーザーを指定します。 いいえ  
password ユーザー (username) のパスワードを指定します。 いいえ  
encryptedCredential FTP サーバーにアクセスするための暗号化された資格情報を指定します。 いいえ  
gatewayName オンプレミスの FTP サーバーに接続するための Data Management Gateway のゲートウェイの名前を指定します。 いいえ  
port FTP サーバーがリッスンしているポートを指定します。 いいえ 21
enableSsl SSL/TLS チャネル上の FTP を使用するかどうかを指定します。 いいえ true
enableServerCertificateValidation FTP over SSL/TLS チャネルを使用しているときにサーバーの TLS/SSL 証明書の検証を有効にするかどうかを指定します。 いいえ true

Note

FTP コネクタでは、暗号化なしまたは明示的な SSL/TLS 暗号化での FTP サーバーへのアクセスがサポートされています。暗黙的な SSL/TLS 暗号化はサポートされていません。

匿名認証を使用

{
    "name": "FTPLinkedService",
    "properties": {
        "type": "FtpServer",
        "typeProperties": {
            "authenticationType": "Anonymous",
              "host": "myftpserver.com"
        }
    }
}

基本認証のためユーザー名とパスワードをプレーン テキストで使用

{
    "name": "FTPLinkedService",
    "properties": {
    "type": "FtpServer",
        "typeProperties": {
            "host": "myftpserver.com",
            "authenticationType": "Basic",
            "username": "Admin",
            "password": "123456"
        }
    }
}

ポート、enableSsl、enableServerCertificateValidation を使用

{
    "name": "FTPLinkedService",
    "properties": {
        "type": "FtpServer",
        "typeProperties": {
            "host": "myftpserver.com",
            "authenticationType": "Basic",
            "username": "Admin",
            "password": "123456",
            "port": "21",
            "enableSsl": true,
            "enableServerCertificateValidation": true
        }
    }
}

認証およびゲートウェイに encryptedCredential を使用

{
    "name": "FTPLinkedService",
    "properties": {
        "type": "FtpServer",
        "typeProperties": {
            "host": "myftpserver.com",
            "authenticationType": "Basic",
            "encryptedCredential": "xxxxxxxxxxxxxxxxx",
            "gatewayName": "mygateway"
        }
    }
}

データセットのプロパティ

データセットの定義に使用できるセクションとプロパティの完全な一覧については、データセットの作成をご覧ください。 データセット JSON の構造、可用性、ポリシーなどのセクションは、データセットのすべての型でほぼ同じです。

typeProperties セクションは、データセットの型ごとに異なります。 これは、データセット型に固有の情報を提供します。 FileShare 型のデータセットの typeProperties セクションには次のプロパティがあります。

プロパティ 説明 必須
folderPath フォルダーへのサブパス。 文字列内の特殊文字にはエスケープ文字 "\" を使用します。 例については、「サンプルのリンクされたサービスとデータセットの定義」を参照してください。

このプロパティを partitionBy と組み合わせて、スライスの開始および終了日時に基づくフォルダー パスを使用できます。
はい
fileName テーブルでフォルダー内の特定のファイルを参照するには、folderPath にファイルの名前を指定します。 このプロパティの値を設定しない場合、テーブルはフォルダー内のすべてのファイルを参照します。

出力データセットに fileName が指定されていない場合、生成されるファイルの名前は次の形式になります。

Data.<Guid>.txt (例:Data.0a405f8a-93ff-4c6f-b3be-f69616f1df7a.txt)
いいえ
fileFilter すべてのファイルではなく、folderPath 内のファイルのサブセットを選択するために使用するフィルターを指定します。

使用可能な値: * (複数の文字) および ? (単一の文字)。

例 1: "fileFilter": "*.log"
例 2: "fileFilter": 2014-1-?.txt"

fileFilter は FileShare 入力データセットに適用されます。 このプロパティは、Hadoop 分散ファイル システム (HDFS) ではサポートされていません。
いいえ
partitionedBy 時系列データに動的な folderPathfileName を指定するために使用します。 たとえば、毎時間のデータとしてパラメーター化されている folderPath を指定できます。 いいえ
format 次の種類の形式がサポートされます:TextFormatJsonFormatAvroFormatOrcFormatParquetFormat です。 形式の type プロパティをいずれかの値に設定します。 詳細については、Text FormatJson FormatAvro FormatOrc FormatParquet Format の各セクションを参照してください。

コピーしたいファイルがファイルベース ストア間である場合 (バイナリ コピー) は、入力と出力の両方のデータセット定義で format セクションをスキップします。
いいえ
compression データの圧縮の種類とレベルを指定します。 サポートされる種類は GZipDeflateBZip2ZipDeflate です。サポートされるレベルは OptimalFastest です。 詳細については、「Azure Data Factory のファイル形式と圧縮形式」を参照してください。 いいえ
useBinaryTransfer バイナリ転送モードを使用するかどうかを指定します。 値は、バイナリ モードの場合は true (既定値)、ASCII の場合は false です。 このプロパティを使用できるのは、関連するリンクされたサービスの種類がFtpServer の場合のみです。 いいえ

注意

fileNamefileFilter は、同時に使用することができません。

partitionedBy プロパティの使用

前のセクションで説明したように、partitionedBy プロパティを使用して時系列データに動的な folderPath および fileName を指定できます。

時系列データセット、スケジュール作成、スライスの詳細については、データセットの作成スケジュール設定と実行、およびパイプラインの作成を参照してください。

サンプル 1

"folderPath": "wikidatagateway/wikisampledataout/{Slice}",
"partitionedBy":
[
    { "name": "Slice", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyyMMddHH" } },
],

この例では、{Slice} が Data Factory システム変数 SliceStart の値に、指定された形式 (YYYYMMDDHH) で置き換えられます。 SliceStart はスライスの開始時刻です。 フォルダーパスはスライスごとに異なります。 (例: wikidatagateway/wikisampledataout/2014100103 または wikidatagateway/wikisampledataout/2014100104)

サンプル 2

"folderPath": "wikidatagateway/wikisampledataout/{Year}/{Month}/{Day}",
"fileName": "{Hour}.csv",
"partitionedBy":
[
    { "name": "Year", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyy" } },
    { "name": "Month", "value": { "type": "DateTime", "date": "SliceStart", "format": "MM" } },
    { "name": "Day", "value": { "type": "DateTime", "date": "SliceStart", "format": "dd" } },
    { "name": "Hour", "value": { "type": "DateTime", "date": "SliceStart", "format": "hh" } }
],

この例では、SliceStart の年、月、日、時刻が folderPath プロパティと fileName プロパティで使用される個別の変数に抽出されます。

コピー アクティビティのプロパティ

アクティビティの定義に利用できるセクションとプロパティの完全な一覧については、パイプラインの作成に関する記事を参照してください。 名前、説明、入力テーブル、出力テーブル、ポリシーなどのプロパティは、あらゆる種類のアクティビティで使用できます。

一方、アクティビティの typeProperties セクションで使用できるプロパティは、各アクティビティの種類によって異なります。 コピー アクティビティの場合、type プロパティはソースとシンクの種類によって異なります。

コピー アクティビティで、source が FileSystemSource 型の場合は、typeProperties セクションで次のプロパティを使用できます:

プロパティ 説明 使用できる値 必須
recursive データをサブフォルダーから再帰的に読み取るか、指定したフォルダーからのみ読み取るかを指定します。 True、False (既定値) いいえ

JSON の使用例:FTP サーバーから Azure BLOB にデータをコピーする

このサンプルは、FTP サーバーから Azure Blob ストレージにデータをコピーする方法を示します。 ただし、Data Factory のコピー アクティビティを使用して、サポートされるデータ ストアと形式で説明されているシンクのいずれかにデータを直接コピーすることができます。

以下の例は、Visual Studio または Azure PowerShell を使用してパイプラインを作成する際に使用できるサンプルの JSON 定義です。

このサンプル データでは、1 時間おきに FTP サーバーから Azure BLOB にデータがコピーされます。 これらのサンプルで使用される JSON プロパティの説明はサンプルに続くセクションにあります。

FTP のリンクされたサービス

この例では、ユーザー名とパスワードをプレーン テキストで使用した基本認証を使用します。 また、次のいずれかの方法を使用することもできます。

  • 匿名認証
  • 資格情報が暗号化された基本認証
  • FTP over SSL/TLS (FTPS)

使用可能なさまざまな種類の認証については、FTP のリンクされたサービスに関するセクションを参照してください。

{
    "name": "FTPLinkedService",
    "properties": {
        "type": "FtpServer",
        "typeProperties": {
            "host": "myftpserver.com",
            "authenticationType": "Basic",
            "username": "Admin",
            "password": "123456"
        }
    }
}

Azure Storage のリンクされたサービス

{
  "name": "AzureStorageLinkedService",
  "properties": {
    "type": "AzureStorage",
    "typeProperties": {
      "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
    }
  }
}

FTP入力データセット

このデータセットは FTP フォルダー mysharedfolder とファイル test.csv を参照します。 パイプラインにより、ファイルがコピー先にコピーされます。

externaltrue に設定すると、データセットが Data Factory の外部にあり、Data Factory のアクティビティによって生成されたものではないことが Data Factory サービスに通知されます。

{
  "name": "FTPFileInput",
  "properties": {
    "type": "FileShare",
    "linkedServiceName": "FTPLinkedService",
    "typeProperties": {
      "folderPath": "mysharedfolder",
      "fileName": "test.csv",
      "useBinaryTransfer": true
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    }
  }
}

Azure BLOB の出力データセット

データは新しい BLOB に 1 時間おきに書き込まれます (frequency: hour、interval: 1)。 BLOB のフォルダー パスは、処理中のスライスの開始時間に基づき、動的に評価されます。 フォルダー パスは開始時間の年、月、日、時刻の部分を使用します。

{
    "name": "AzureBlobOutput",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": "AzureStorageLinkedService",
        "typeProperties": {
            "folderPath": "mycontainer/ftp/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}",
            "format": {
                "type": "TextFormat",
                "rowDelimiter": "\n",
                "columnDelimiter": "\t"
            },
            "partitionedBy": [
                {
                    "name": "Year",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "yyyy"
                    }
                },
                {
                    "name": "Month",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "MM"
                    }
                },
                {
                    "name": "Day",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "dd"
                    }
                },
                {
                    "name": "Hour",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "HH"
                    }
                }
            ]
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        }
    }
}

ファイル システム ソースおよび BLOB シンクを使用するパイプラインでのコピー アクティビティ

パイプラインには、入力データセットと出力データセットを使用するように構成され、1 時間おきに実行するようにスケジュールされているコピー アクティビティが含まれています。 パイプライン JSON 定義で、source 型が FileSystemSource に設定され、sink 型が BlobSink に設定されています。

{
    "name": "pipeline",
    "properties": {
        "activities": [{
            "name": "FTPToBlobCopy",
            "inputs": [{
                "name": "FtpFileInput"
            }],
            "outputs": [{
                "name": "AzureBlobOutput"
            }],
            "type": "Copy",
            "typeProperties": {
                "source": {
                    "type": "FileSystemSource"
                },
                "sink": {
                    "type": "BlobSink"
                }
            },
            "scheduler": {
                "frequency": "Hour",
                "interval": 1
            },
            "policy": {
                "concurrency": 1,
                "executionPriorityOrder": "NewestFirst",
                "retry": 1,
                "timeout": "00:05:00"
            }
        }],
        "start": "2016-08-24T18:00:00Z",
        "end": "2016-08-24T19:00:00Z"
    }
}

注意

ソース データセット列からシンク データセット列へのマッピングについては、Azure Data Factory のデータセット列のマッピングに関するページをご覧ください。

次のステップ

次の記事をご覧ください。