Azure Data Factory パイプラインでカスタム アクティビティを使用するUse custom activities in an Azure Data Factory pipeline

Azure Data Factory パイプラインでは、2 種類のアクティビティを使用できます。There are two types of activities that you can use in an Azure Data Factory pipeline.

Data Factory でサポートされていないデータ ストアとの間でデータを移動する場合や、Data Factory でサポートされていない方法でデータを変換/処理する場合は、独自のデータ移動ロジックまたはデータ変換ロジックでカスタム アクティビティを作成し、パイプラインでそのアクティビティを使用します。To move data to/from a data store that Data Factory does not support, or to transform/process data in a way that isn't supported by Data Factory, you can create a Custom activity with your own data movement or transformation logic and use the activity in a pipeline. カスタム アクティビティでは、仮想マシンの Azure Batch プールでカスタマイズされたコード ロジックを実行します。The custom activity runs your customized code logic on an Azure Batch pool of virtual machines.

注意

この記事は、新しい Azure PowerShell Az モジュールを使用するために更新されました。This article has been updated to use the new Azure PowerShell Az module. AzureRM モジュールはまだ使用でき、少なくとも 2020 年 12 月までは引き続きバグ修正が行われます。You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Az モジュールと AzureRM の互換性の詳細については、「Introducing the new Azure PowerShell Az module (新しい Azure PowerShell Az モジュールの概要)」を参照してください。To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Az モジュールのインストール手順については、Azure PowerShell のインストールを参照してください。For Az module installation instructions, see Install Azure PowerShell.

Azure Batch サービスを初めて利用する場合は、次の記事をご覧ください。See following articles if you are new to Azure Batch service:

Azure Batch のリンクされたサービスAzure Batch linked service

次の JSON では、サンプルの Azure Batch のリンクされたサービスを定義しています。The following JSON defines a sample Azure Batch linked service. 詳細については、「Azure Data Factory でサポートされるコンピューティング環境」をご覧ください。For details, see Compute environments supported by Azure Data Factory

{
    "name": "AzureBatchLinkedService",
    "properties": {
        "type": "AzureBatch",
        "typeProperties": {
            "accountName": "batchaccount",
            "accessKey": {
                "type": "SecureString",
                "value": "access key"
            },
            "batchUri": "https://batchaccount.region.batch.azure.com",
            "poolName": "poolname",
            "linkedServiceName": {
                "referenceName": "StorageLinkedService",
                "type": "LinkedServiceReference"
            }
        }
    }
}

Azure Batch のリンクされたサービスの詳細については、計算のリンクされたサービスに関する記事をご覧ください。To learn more about Azure Batch linked service, see Compute linked services article.

カスタム アクティビティCustom activity

次の JSON スニペットでは、単純なカスタム アクティビティを使用するパイプラインを定義しています。The following JSON snippet defines a pipeline with a simple Custom Activity. このアクティビティ定義には、Azure Batch のリンクされたサービスへの参照が含まれています。The activity definition has a reference to the Azure Batch linked service.

{
  "name": "MyCustomActivityPipeline",
  "properties": {
    "description": "Custom activity sample",
    "activities": [{
      "type": "Custom",
      "name": "MyCustomActivity",
      "linkedServiceName": {
        "referenceName": "AzureBatchLinkedService",
        "type": "LinkedServiceReference"
      },
      "typeProperties": {
        "command": "helloworld.exe",
        "folderPath": "customactv2/helloworld",
        "resourceLinkedService": {
          "referenceName": "StorageLinkedService",
          "type": "LinkedServiceReference"
        }
      }
    }]
  }
}

このサンプルでは、helloworld.exe は、resourceLinkedService で使用される Azure ストレージ アカウントの customactv2/helloworld フォルダーに格納されているカスタム アプリケーションです。In this sample, the helloworld.exe is a custom application stored in the customactv2/helloworld folder of the Azure Storage account used in the resourceLinkedService. カスタム アクティビティでは、Azure Batch で実行されるこのカスタム アプリケーションを送信します。The Custom activity submits this custom application to be executed on Azure Batch. コマンドは、Azure Batch プール ノードのターゲット オペレーティング システムで実行できる任意の優先アプリケーションに置き換えることができます。You can replace the command to any preferred application that can be executed on the target Operation System of the Azure Batch Pool nodes.

次の表は、このアクティビティに固有のプロパティの名前と説明です。The following table describes names and descriptions of properties that are specific to this activity.

プロパティProperty 説明Description 必須Required
namename パイプラインのアクティビティの名前。Name of the activity in the pipeline はいYes
descriptiondescription アクティビティの動作を説明するテキスト。Text describing what the activity does. いいえNo
typetype カスタム アクティビティの場合、アクティビティの種類は Custom です。For Custom activity, the activity type is Custom. はいYes
linkedServiceNamelinkedServiceName Azure Batch にリンクされたサービス。Linked Service to Azure Batch. このリンクされたサービスの詳細については、計算のリンクされたサービスに関する記事をご覧ください。To learn about this linked service, see Compute linked services article. はいYes
commandcommand 実行されるカスタム アプリケーションのコマンド。Command of the custom application to be executed. アプリケーションが Azure Batch プール ノードで既に使用可能な場合は、resourceLinkedService と folderPath を省略できます。If the application is already available on the Azure Batch Pool Node, the resourceLinkedService and folderPath can be skipped. たとえば、Windows バッチ プール ノードでネイティブでサポートされている cmd /c dir をコマンドとして指定できます。For example, you can specify the command to be cmd /c dir, which is natively supported by the Windows Batch Pool node. はいYes
resourceLinkedServiceresourceLinkedService カスタム アプリケーションが格納されているストレージ アカウントへの Azure Storage のリンクされたサービス。Azure Storage Linked Service to the Storage account where the custom application is stored いいえ *No *
folderPathfolderPath カスタム アプリケーションとそのすべての依存関係のフォルダーのパス。Path to the folder of the custom application and all its dependencies

依存関係ファイルをサブフォルダーに置いている場合 (つまり、folderPath の下のフォルダー階層構造内に置いている場合)、現在の動作では、ファイルが Azure Batch にコピーされるときに、フォルダー構造がフラット化されます。If you have dependencies stored in subfolders - that is, in a hierarchical folder structure under folderPath - the folder structure is currently flattened when the files are copied to Azure Batch. つまり、すべてのファイルは、サブフォルダーを使用せず、1 つのフォルダーにコピーされます。That is, all files are copied into a single folder with no subfolders. この問題を回避するには、ファイルを圧縮し、圧縮されたファイルをコピーした後、目的の場所でカスタム コードと共に解凍することを検討してください。To work around this behavior, consider compressing the files, copying the compressed file, and then unzipping it with custom code in the desired location.
いいえ *No *
referenceObjectsreferenceObjects 既存のリンクされたサービスとデータセットの配列。An array of existing Linked Services and Datasets. カスタム コードが Data Factory のリソースを参照できるように、参照されているリンクされたサービスとデータセットが JSON 形式でカスタム アプリケーションに渡されます。The referenced Linked Services and Datasets are passed to the custom application in JSON format so your custom code can reference resources of the Data Factory いいえNo
extendedPropertiesextendedProperties カスタム コードが追加のプロパティを参照できるように、JSON 形式でカスタム アプリケーションに渡すことができるユーザー定義プロパティ。User-defined properties that can be passed to the custom application in JSON format so your custom code can reference additional properties いいえNo
retentionTimeInDaysretentionTimeInDays カスタム アクティビティ用に送信するファイルのリテンション期間。The retention time for the files submitted for custom activity. 既定値は 30 日です。Default value is 30 days. いいえNo

* resourceLinkedService プロパティと folderPath プロパティは、両方とも指定するか、両方とも省略する必要があります。* The properties resourceLinkedService and folderPath must either both be specified or both be omitted.

注意

リンクされたサービスをカスタム アクティビティで ReferenceObjects として渡す場合は、セキュリティ上の観点から、Azure Key Vault 対応のリンクされたサービスを渡して (セキュリティで保護された文字列が含まれていないため)、シークレット名を使用して Key Vault のコードから直接資格情報を取り込むことをお勧めします。If you are passing linked services as referenceObjects in Custom Activity, it is a good security practice to pass an Azure Key Vault enabled linked service (since it does not contain any secure strings) and fetch the credentials using secret name directly from Key Vault from the code. Azure Key Vault 対応のリンクされたサービスを参照し、Key Vault から資格情報を取得して、コード内のストレージにアクセスする例がここに記載されています。You can find an example here that references AKV enabled linked service, retrieves the credentials from Key Vault, and then accesses the storage in the code.

カスタム アクティビティのアクセス許可Custom activity permissions

カスタム アクティビティでは、Azure Batch の自動ユーザー アカウントが "タスク スコープのある管理者以外のアクセス" (既定の自動ユーザーの仕様) に設定されます。The custom activity sets the Azure Batch auto-user account to Non-admin access with task scope (the default auto-user specification). 自動ユーザー アカウントのアクセス許可レベルを変更することはできません。You can't change the permission level of the auto-user account. 詳細については、「Batch のユーザー アカウントでタスクを実行する」の「自動ユーザー アカウント」を参照してください。For more info, see Run tasks under user accounts in Batch | Auto-user accounts.

コマンドの実行Executing commands

カスタム アクティビティを使用してコマンドを直接実行できます。You can directly execute a command using Custom Activity. 次の例は、Azure Batch プールのターゲット ノードで "echo hello world" コマンドを実行し、出力を stdout に出力します。The following example runs the "echo hello world" command on the target Azure Batch Pool nodes and prints the output to stdout.

{
  "name": "MyCustomActivity",
  "properties": {
    "description": "Custom activity sample",
    "activities": [{
      "type": "Custom",
      "name": "MyCustomActivity",
      "linkedServiceName": {
        "referenceName": "AzureBatchLinkedService",
        "type": "LinkedServiceReference"
      },
      "typeProperties": {
        "command": "cmd /c echo hello world"
      }
    }]
  }
}

オブジェクトとプロパティを渡すPassing objects and properties

次のサンプルは、referenceObjects と extendedProperties を使用して、Data Factory オブジェクトとユーザー定義プロパティをカスタム アプリケーションに渡す方法を示しています。This sample shows how you can use the referenceObjects and extendedProperties to pass Data Factory objects and user-defined properties to your custom application.

{
  "name": "MyCustomActivityPipeline",
  "properties": {
    "description": "Custom activity sample",
    "activities": [{
      "type": "Custom",
      "name": "MyCustomActivity",
      "linkedServiceName": {
        "referenceName": "AzureBatchLinkedService",
        "type": "LinkedServiceReference"
      },
      "typeProperties": {
        "command": "SampleApp.exe",
        "folderPath": "customactv2/SampleApp",
        "resourceLinkedService": {
          "referenceName": "StorageLinkedService",
          "type": "LinkedServiceReference"
        },
        "referenceObjects": {
          "linkedServices": [{
            "referenceName": "AzureBatchLinkedService",
            "type": "LinkedServiceReference"
          }]
        },
        "extendedProperties": {
          "connectionString": {
            "type": "SecureString",
            "value": "aSampleSecureString"
          },
          "PropertyBagPropertyName1": "PropertyBagValue1",
          "propertyBagPropertyName2": "PropertyBagValue2",
          "dateTime1": "2015-04-12T12:13:14Z"
        }
      }
    }]
  }
}

アクティビティを実行すると、referenceObjects と extendedProperties が、SampleApp.exe の同じ実行フォルダーに配置されている次のファイルに格納されます。When the activity is executed, referenceObjects and extendedProperties are stored in following files that are deployed to the same execution folder of the SampleApp.exe:

  • activity.json

    extendedProperties とカスタム アクティビティのプロパティが格納されます。Stores extendedProperties and properties of the custom activity.

  • linkedServices.json

    referenceObjects プロパティで定義されているリンクされたサービスの配列が格納されます。Stores an array of Linked Services defined in the referenceObjects property.

  • datasets.json

    referenceObjects プロパティで定義されているデータセットの配列が格納されます。Stores an array of Datasets defined in the referenceObjects property.

次のサンプル コードは、SampleApp.exe が JSON ファイルの必要な情報にアクセスする方法を示しています。Following sample code demonstrate how the SampleApp.exe can access the required information from JSON files:

using Newtonsoft.Json;
using System;
using System.IO;

namespace SampleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //From Extend Properties
            dynamic activity = JsonConvert.DeserializeObject(File.ReadAllText("activity.json"));
            Console.WriteLine(activity.typeProperties.extendedProperties.connectionString.value);

            // From LinkedServices
            dynamic linkedServices = JsonConvert.DeserializeObject(File.ReadAllText("linkedServices.json"));
            Console.WriteLine(linkedServices[0].properties.typeProperties.accountName);
        }
    }
}

実行の出力を取得するRetrieve execution outputs

次の PowerShell コマンドを使用して、パイプラインの実行を開始できます。You can start a pipeline run using the following PowerShell command:

$runId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName $pipelineName

パイプラインが実行されているときは、次のコマンドを使用して実行出力を確認できます。When the pipeline is running, you can check the execution output using the following commands:

while ($True) {
    $result = Get-AzDataFactoryV2ActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineRunId $runId -RunStartedAfter (Get-Date).AddMinutes(-30) -RunStartedBefore (Get-Date).AddMinutes(30)

    if(!$result) {
        Write-Host "Waiting for pipeline to start..." -foregroundcolor "Yellow"
    }
    elseif (($result | Where-Object { $_.Status -eq "InProgress" } | Measure-Object).count -ne 0) {
        Write-Host "Pipeline run status: In Progress" -foregroundcolor "Yellow"
    }
    else {
        Write-Host "Pipeline '"$pipelineName"' run finished. Result:" -foregroundcolor "Yellow"
        $result
        break
    }
    ($result | Format-List | Out-String)
    Start-Sleep -Seconds 15
}

Write-Host "Activity `Output` section:" -foregroundcolor "Yellow"
$result.Output -join "`r`n"

Write-Host "Activity `Error` section:" -foregroundcolor "Yellow"
$result.Error -join "`r`n"

カスタム アプリケーションの stdoutstderr は、タスクの GUID を使用して Azure Batch のリンクされたサービスを作成したときに定義した、Azure Storage のリンクされたサービスの adfjobs コンテナーに保存されます。The stdout and stderr of your custom application are saved to the adfjobs container in the Azure Storage Linked Service you defined when creating Azure Batch Linked Service with a GUID of the task. 次のスニペットに示すように、アクティビティの実行の出力から詳細なパスを取得できます。You can get the detailed path from Activity Run output as shown in the following snippet:

Pipeline ' MyCustomActivity' run finished. Result:

ResourceGroupName : resourcegroupname
DataFactoryName   : datafactoryname
ActivityName      : MyCustomActivity
PipelineRunId     : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
PipelineName      : MyCustomActivity
Input             : {command}
Output            : {exitcode, outputs, effectiveIntegrationRuntime}
LinkedServiceName :
ActivityRunStart  : 10/5/2017 3:33:06 PM
ActivityRunEnd    : 10/5/2017 3:33:28 PM
DurationInMs      : 21203
Status            : Succeeded
Error             : {errorCode, message, failureType, target}

Activity Output section:
"exitcode": 0
"outputs": [
  "https://<container>.blob.core.windows.net/adfjobs/<GUID>/output/stdout.txt",
  "https://<container>.blob.core.windows.net/adfjobs/<GUID>/output/stderr.txt"
]
"effectiveIntegrationRuntime": "DefaultIntegrationRuntime (East US)"
Activity Error section:
"errorCode": ""
"message": ""
"failureType": ""
"target": "MyCustomActivity"

ダウンストリームのアクティビティで stdout.txt の内容を使用する場合は、式 "@activity('MyCustomActivity').output.outputs[0]" で stdout.txt ファイルへのパスを取得できます。If you would like to consume the content of stdout.txt in downstream activities, you can get the path to the stdout.txt file in expression "@activity('MyCustomActivity').output.outputs[0]".

重要

  • activity.json、linkedServices.json、datasets.json は、Batch タスクのランタイム フォルダーに格納されます。The activity.json, linkedServices.json, and datasets.json are stored in the runtime folder of the Batch task. この例では、activity.json、linkedServices.json、datasets.json は、"https://adfv2storage.blob.core.windows.net/adfjobs/\<GUID>/runtime/" パスに格納されています。For this example, the activity.json, linkedServices.json, and datasets.json are stored in "https://adfv2storage.blob.core.windows.net/adfjobs/\<GUID>/runtime/" path. 必要に応じて、パスを個別にクリーンアップする必要があります。If needed, you need to clean them up separately.
  • セルフホステッド統合ランタイムを使用しているリンクされたサービスでは、顧客が定義したプライベート ネットワーク環境内に資格情報を保持できるように、セルフホステッド統合ランタイムによってキーやパスワードなどの機密情報が暗号化されます。For Linked Services that use the Self-Hosted Integration Runtime, the sensitive information like keys or passwords are encrypted by the Self-Hosted Integration Runtime to ensure credential stays in customer defined private network environment. この場合、カスタム アプリケーション コードから一部の機密フィールドを参照したときにフィールドが見つからない可能性があります。Some sensitive fields could be missing when referenced by your custom application code in this way. 必要に応じて、リンクされたサービスの参照を使用するのではなく、extendedProperties で SecureString を使用してください。Use SecureString in extendedProperties instead of using Linked Service reference if needed.

別のアクティビティに出力を渡すPass outputs to another activity

カスタム アクティビティ内のコードから Azure Data Factory にカスタム値を送信して戻すことができます。You can send custom values from your code in a Custom Activity back to Azure Data Factory. そのためには、アプリケーションからの outputs.json にそれを書き込みます。You can do so by writing them into outputs.json from your application. Data Factory では、outputs.json の内容がコピーされて、customOutput プロパティの値としてアクティビティの出力に追加されます。Data Factory copies the content of outputs.json and appends it into the Activity Output as the value of the customOutput property. (サイズの制限は 2 MBです。)ダウンストリーム アクティビティで outputs.json の内容を使用する場合は、式 @activity('<MyCustomActivity>').output.customOutput を使用して値を取得できます。(The size limit is 2MB.) If you want to consume the content of outputs.json in downstream activities, you can get the value by using the expression @activity('<MyCustomActivity>').output.customOutput.

SecureString 出力の取得Retrieve SecureString outputs

SecureString 型として指定された機密プロパティ値 (この記事の一部のサンプルに含まれています) は、Data Factory ユーザー インターフェイスの [監視] タブでマスクされます。Sensitive property values designated as type SecureString, as shown in some of the examples in this article, are masked out in the Monitoring tab in the Data Factory user interface. ただし、実際のパイプライン実行では、SecureString プロパティは activity.json ファイル内でプレーン テキストの JSON としてシリアル化されます。In actual pipeline execution, however, a SecureString property is serialized as JSON within the activity.json file as plain text. 例:For example:

"extendedProperties": {
  "connectionString": {
    "type": "SecureString",
    "value": "aSampleSecureString"
  }
}

このシリアル化は、真にセキュアなものではなく、セキュリティの確保を意図したものではありません。This serialization is not truly secure, and is not intended to be secure. [監視] タブで値をマスクすることを、Data Factory に示すことが目的です。The intent is to hint to Data Factory to mask the value in the Monitoring tab.

カスタム アクティビティから SecureString 型のプロパティにアクセスするには、.EXE と同じフォルダーに配置されている activity.json ファイルを読み取り、JSON を逆シリアル化した後、JSON プロパティにアクセスします (extendedProperties => [propertyName] => value)。To access properties of type SecureString from a custom activity, read the activity.json file, which is placed in the same folder as your .EXE, deserialize the JSON, and then access the JSON property (extendedProperties => [propertyName] => value).

v2 カスタム アクティビティとバージョン 1 (カスタム) DotNet アクティビティを比較するCompare v2 Custom Activity and version 1 (Custom) DotNet Activity

Azure Data Factory バージョン 1 では、IDotNetActivity インターフェイスの Execute メソッドを実装するクラスを含む .Net クラス ライブラリ プロジェクトを作成して (カスタム) DotNet アクティビティを実装します。In Azure Data Factory version 1, you implement a (Custom) DotNet Activity by creating a .NET Class Library project with a class that implements the Execute method of the IDotNetActivity interface. (カスタム) DotNet アクティビティの JSON ペイロードのリンクされたサービス、データセット、および拡張プロパティは、厳密に型指定されたオブジェクトとして Execution メソッドに渡されます。The Linked Services, Datasets, and Extended Properties in the JSON payload of a (Custom) DotNet Activity are passed to the execution method as strongly-typed objects. バージョン 1 のビヘイビアーの詳細については、バージョン 1 の (カスタム) DotNet に関するページを参照してください。For details about the version 1 behavior, see (Custom) DotNet in version 1. この実装のため、バージョン 1 DotNet アクティビティ コードは、.NET Framework 4.5.2 をターゲットにする必要があります。Because of this implementation, your version 1 DotNet Activity code has to target .NET Framework 4.5.2. バージョン 1 の DotNet アクティビティは、Windows ベースの Azure Batch プールのノードで実行する必要があります。The version 1 DotNet Activity also has to be executed on Windows-based Azure Batch Pool nodes.

Azure Data Factory V2 のカスタム アクティビティでは、.NET インターフェイスを実装する必要はありません。In the Azure Data Factory V2 Custom Activity, you are not required to implement a .NET interface. コマンドとスクリプトを直接実行できるようになり、実行可能ファイルとしてコンパイルされた独自のカスタム コードを実行できるようになりました。You can now directly run commands, scripts, and your own custom code, compiled as an executable. この実装を構成するには、Command プロパティと folderPath プロパティを一緒に指定する必要があります。To configure this implementation, you specify the Command property together with the folderPath property. カスタム アクティビティにより、実行可能ファイルとその依存関係が folderpath にアップロードされ、コマンドが実行されます。The Custom Activity uploads the executable and its dependencies to folderpath and executes the command for you.

Data Factory v2 カスタム アクティビティの JSON ペイロードに定義されたリンクされたサービス、(referenceObjects に定義されている) データセット、および拡張プロパティには、実行可能ファイルから JSON ファイルとしてアクセスできます。The Linked Services, Datasets (defined in referenceObjects), and Extended Properties defined in the JSON payload of a Data Factory v2 Custom Activity can be accessed by your executable as JSON files. 前述の SampleApp.exe コード サンプルに示すように、JSON シリアライザーを使用して、必要なプロパティにアクセスできます。You can access the required properties using a JSON serializer as shown in the preceding SampleApp.exe code sample.

Data Factory V2 カスタム アクティビティに導入された変更により、カスタム コード ロジックを任意の言語で記述し、Azure Batch でサポートされている Windows および Linux オペレーション システムで実行することができます。With the changes introduced in the Data Factory V2 Custom Activity, you can write your custom code logic in your preferred language and execute it on Windows and Linux Operation Systems supported by Azure Batch.

次の表では、Data Factory V2 カスタム アクティビティと Data Factory V1 (カスタム) DotNet アクティビティの違いを示します。The following table describes the differences between the Data Factory V2 Custom Activity and the Data Factory version 1 (Custom) DotNet Activity:

相違点Differences カスタム アクティビティCustom Activity バージョン 1 (カスタム) DotNet アクティビティversion 1 (Custom) DotNet Activity
カスタム ロジックの定義方法How custom logic is defined 実行可能ファイルを提供するBy providing an executable .NET DLL を実装するBy implementing a .NET DLL
カスタム ロジックの実行環境Execution environment of the custom logic Windows または LinuxWindows or Linux Windows (.NET Framework 4.5.2)Windows (.NET Framework 4.5.2)
スクリプトの実行Executing scripts スクリプトの直接実行をサポート (例: Windows VM 上で "cmd /c echo hello world")Supports executing scripts directly (for example "cmd /c echo hello world" on Windows VM) .NET DLL に実装することが必要Requires implementation in the .NET DLL
データセットは必要かDataset required 省略可能Optional アクティビティを連鎖して情報を渡すために必要Required to chain activities and pass information
アクティビティからカスタム ロジックへの情報の受け渡しPass information from activity to custom logic ReferenceObjects (LinkedServices と Datasets) および ExtendedProperties (カスタム プロパティ) を使用Through ReferenceObjects (LinkedServices and Datasets) and ExtendedProperties (custom properties) ExtendedProperties (カスタム プロパティ)、入力および出力データセットを使用Through ExtendedProperties (custom properties), Input, and Output Datasets
カスタム ロジックでの情報の取得Retrieve information in custom logic 実行可能ファイルと同じフォルダーに格納されている activity.json、linkedServices.json、および datasets.json を解析Parses activity.json, linkedServices.json, and datasets.json stored in the same folder of the executable .NET SDK (.NET Frame 4.5.2) を使用Through .NET SDK (.NET Frame 4.5.2)
ログの記録Logging STDOUT に直接書き込むWrites directly to STDOUT .NET DLL でロガーを実装するImplementing Logger in .NET DLL

バージョン 1 (カスタム) DotNet アクティビティ用に書かれた .NET コードが既にあり、これをカスタム アクティビティの現在のバージョンで使用するには、コードを変更する必要があります。If you have existing .NET code written for a version 1 (Custom) DotNet Activity, you need to modify your code for it to work with the current version of the Custom Activity. 以下のガイドラインの概要に従って、コードを更新します。Update your code by following these high-level guidelines:

  • プロジェクトを .NET クラス ライブラリからコンソール アプリに変更します。Change the project from a .NET Class Library to a Console App.
  • Main メソッドでアプリケーションを起動します。Start your application with the Main method. IDotNetActivity インターフェイスの Execute メソッドは、必要なくなりました。The Execute method of the IDotNetActivity interface is no longer required.
  • JSON シリアライザーを使用して、リンクされたサービス、データセット、およびアクティビティを、厳密に型指定されたオブジェクトとしてではなく読み取り、解析します。Read and parse the Linked Services, Datasets and Activity with a JSON serializer, and not as strongly-typed objects. 必要なプロパティの値をメインのカスタム コード ロジックに渡します。Pass the values of required properties to your main custom code logic. 前述の SampleApp.exe コードをサンプルとして参照してください。Refer to the preceding SampleApp.exe code as an example.
  • ロガー オブジェクトは、現在サポートされていません。The Logger object is no longer supported. 実行可能ファイルからの出力をコンソールに出力できます。この出力は、stdout.txt に保存されます。Output from your executable can be printed to the console and is saved to stdout.txt.
  • Microsoft.Azure.Management.DataFactories NuGet パッケージは、もはや必要ありません。The Microsoft.Azure.Management.DataFactories NuGet package is no longer required.
  • コードをコンパイルし、実行可能ファイルとその依存関係を Azure Storage にアップロードし、folderPath プロパティにパスを定義します。Compile your code, upload the executable and its dependencies to Azure Storage, and define the path in the folderPath property.

Data Factory バージョン 1 の記事「Azure Data Factory パイプラインでカスタム アクティビティを使用する」で説明されているエンド ツー エンドの DLL とパイプラインを Data Factory カスタム アクティビティとして書き直す詳細な例については、Data Factory カスタム アクティビティのサンプルに関するページを参照してください。For a complete sample of how the end-to-end DLL and pipeline sample described in the Data Factory version 1 article Use custom activities in an Azure Data Factory pipeline can be rewritten as a Data Factory Custom Activity, see Data Factory Custom Activity sample.

Azure Batch の自動スケールAuto-scaling of Azure Batch

自動スケール 機能で、Azure Batch プールを作成することもできます。You can also create an Azure Batch pool with autoscale feature. たとえば、専用 VM 数が 0 の Azure Batch プールと、保留中のタスクの数に基づく自動スケールの数式を作成できます。For example, you could create an azure batch pool with 0 dedicated VMs and an autoscale formula based on the number of pending tasks.

このサンプル式は、次の動作を実現します。プールが最初に作成された場合、1 つの VM から開始されます。The sample formula here achieves the following behavior: When the pool is initially created, it starts with 1 VM. $PendingTasks メトリックにより、実行中 + アクティブ (キューに登録済み) 状態のタスク数が定義されます。$PendingTasks metric defines the number of tasks in running + active (queued) state. この数式により、最後の 180 秒間の保留タスク平均数が判明し、TargetDedicated が適宜設定されます。The formula finds the average number of pending tasks in the last 180 seconds and sets TargetDedicated accordingly. それにより、TargetDedicated が 25 台の仮想マシンを超えることはありません。It ensures that TargetDedicated never goes beyond 25 VMs. そのため、新しいタスクが送信されると、プールが自動的に増加します。タスクが完了すると、VM は 1 台ずつ解放され、自動スケールにより VM が減らされます。So, as new tasks are submitted, pool automatically grows and as tasks complete, VMs become free one by one and the autoscaling shrinks those VMs. startingNumberOfVMs と maxNumberofVMs はニーズに合わせて調整できます。startingNumberOfVMs and maxNumberofVMs can be adjusted to your needs.

自動スケールの数式:Autoscale formula:

startingNumberOfVMs = 1;
maxNumberofVMs = 25;
pendingTaskSamplePercent = $PendingTasks.GetSamplePercent(180 * TimeInterval_Second);
pendingTaskSamples = pendingTaskSamplePercent < 70 ? startingNumberOfVMs : avg($PendingTasks.GetSample(180 * TimeInterval_Second));
$TargetDedicated=min(maxNumberofVMs,pendingTaskSamples);

詳細については、「 Azure Batch プール内のコンピューティング ノードの自動スケール 」をご覧ください。See Automatically scale compute nodes in an Azure Batch pool for details.

プールで既定の autoScaleEvaluationIntervalを使用する場合、Batch サービスがカスタム アクティビティを実行する前に VM を準備するのに 15 ~ 30 分かかることがあります。If the pool is using the default autoScaleEvaluationInterval, the Batch service could take 15-30 minutes to prepare the VM before running the custom activity. プールが異なる  autoScaleEvaluationInterval を使用する場合、Batch サービスは autoScaleEvaluationInterval + 10 分を要することがあります。If the pool is using a different autoScaleEvaluationInterval, the Batch service could take autoScaleEvaluationInterval + 10 minutes.

次の手順Next steps

別の手段でデータを変換する方法を説明している次の記事を参照してください。See the following articles that explain how to transform data in other ways: