Azure Data Factory を使用して FTP サーバーからデータを移動する
注意
この記事は、Data Factory のバージョン 1 に適用されます。 現在のバージョンの Data Factory サービスを使用している場合は、V2 の FTP コネクタに関するページを参照してください。
この記事では、Azure Data Factory のコピー アクティビティを使って、FTP サーバーからデータを移動する方法について説明します。 この記事は、コピー アクティビティによるデータ移動の一般的な概要について説明している、データ移動アクティビティに関する記事に基づいています。
FTP サーバーから、サポートされている任意のシンク データ ストアにデータをコピーできます。 コピー アクティビティによってシンクとしてサポートされているデータ ストアの一覧については、サポートされているデータ ストアの表をご覧ください。 データ ファクトリは、他のデータ ストアから FTP サーバーへのデータの移動ではなく、FTP サーバーから他のデータ ストアへのデータの移動のみをサポートします。 オンプレミスとクラウド FTP サーバーの両方をサポートします。
注意
コピー アクティビティでは、コピー先にコピーされた後にソース ファイルが削除されることはありません。 コピー後にソース ファイルを削除する必要がある場合、カスタム アクティビティを作成してファイルを削除し、パイプラインのアクティビティを使用します。
接続性の確保
データをオンプレミスの FTP サーバーからクラウド データ ストア (例: Azure Blob ストレージ) に移動する場合は、Data Management Gateway をインストールして使用します。 Data Management Gateway はオンプレミスのコンピューターにインストールされたクライアント エージェントで、これにより、クラウド サービスはオンプレミスのリソースに接続できます。 詳細については、データ管理ゲートウェイをご覧ください。 ゲートウェイの設定とその使用に関する手順は、オンプレミスの場所とクラウド間のデータ移動を参照してください。 サーバーが Azure IaaS 仮想マシン (VM) 上にある場合でも、FTP サーバーに接続するためにゲートウェイを使用します。
FTP サーバーとして、同じオンプレミスのコンピューターまたは IaaS VM にゲートウェイをインストールすることが可能です。 ただし、リソースの競合を防ぎ、パフォーマンスの向上を図るために、別のコンピューターまたは IaaS VM にゲートウェイをインストールすることをお勧めします。 別のコンピューターにゲートウェイをインストールすると、そのコンピューターが FTP サーバーにアクセスできるようになります。
はじめに
さまざまなツールまたは API を使用して、FTP ソースからデータを移動するコピー アクティビティを含むパイプラインを作成できます。
パイプラインを作成する最も簡単な方法は、Data Factory コピー ウィザードを使うことです。 「チュートリアル:コピー ウィザードを使用してパイプラインを作成する」で、簡単なチュートリアルをご覧いただけます。
また、次のツールを使用してパイプラインを作成することもできます。Visual Studio、PowerShell、Azure Resource Manager テンプレート、 .NET API、REST API。 コピー アクティビティを含むパイプラインを作成するための詳細な手順については、コピー アクティビティのチュートリアルをご覧ください。
ツールと API のいずれを使用する場合も、次の手順を実行して、ソース データ ストアからシンク データ ストアにデータを移動するパイプラインを作成します。
- リンクされたサービスを作成し、入力データ ストアと出力データ ストアをデータ ファクトリにリンクします。
- コピー操作用の入力データと出力データを表すデータセットを作成します。
- 入力としてのデータセットと出力としてのデータセットを受け取るコピー アクティビティを含むパイプラインを作成します。
ウィザードを使用すると、Data Factory エンティティ (リンクされたサービス、データセット、パイプライン) に関する JSON の定義が自動的に作成されます。 (.NET API を除く) ツールまたは API を使う場合は、JSON 形式でこれらの Data Factory エンティティを定義します。 FTP データ ストアからデータをコピーするために使用される Data Factory エンティティ用の JSON 定義のサンプルについては、この記事の「JSON の使用例: FTP サーバーから Azure BLOB にデータをコピーする」セクションを参照してください。
注意
サポートされているファイルと使用する圧縮形式に関する詳細は、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 |
注意
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 | 時系列データに動的な folderPath と fileName を指定するために使用します。 たとえば、毎時間のデータとしてパラメーター化されている folderPath を指定できます。 | いいえ |
format | 次の種類の形式がサポートされます:TextFormat、JsonFormat、AvroFormat、OrcFormat、ParquetFormat です。 形式の type プロパティをいずれかの値に設定します。 詳細については、Text Format、Json Format、Avro Format、Orc Format、Parquet Format の各セクションを参照してください。 コピーしたいファイルがファイルベース ストア間である場合 (バイナリ コピー) は、入力と出力の両方のデータセット定義で format セクションをスキップします。 |
いいえ |
compression | データの圧縮の種類とレベルを指定します。 サポートされる種類は GZip、Deflate、BZip2、ZipDeflate です。サポートされるレベルは Optimal と Fastest です。 詳細については、「Azure Data Factory のファイル形式と圧縮形式」を参照してください。 | いいえ |
useBinaryTransfer | バイナリ転送モードを使用するかどうかを指定します。 値は、バイナリ モードの場合は true (既定値)、ASCII の場合は false です。 このプロパティを使用できるのは、関連するリンクされたサービスの種類がFtpServer の場合のみです。 | いいえ |
注意
fileName と fileFilter は、同時に使用することができません。
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 定義です。
- FtpServer 型のリンクされたサービス
- AzureStorage型のリンクされたサービス
- FileShare 型の入力データセット
- AzureBlob 型の出力データセット
- FileSystemSource および BlobSink を使用するコピー アクティビティを含むパイプライン
このサンプル データでは、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
を参照します。 パイプラインにより、ファイルがコピー先にコピーされます。
external を true に設定すると、データセットが 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 のデータセット列のマッピングに関するページをご覧ください。
次のステップ
次の記事をご覧ください。
Data Factory でのデータ移動 (コピー アクティビティ) のパフォーマンスに影響する主な要因と、パフォーマンスを最適化するための各種方法については、「コピー アクティビティのパフォーマンスとチューニングに関するガイド」をご覧ください。
コピー アクティビティを使用したパイプライン作成の詳細な手順については、コピー アクティビティのチュートリアルを参照してください。