إعداد Azure-SSIS IR في Azure Data Factory باستخدام PowerShell

ينطبق على: Azure Data Factory Azure Synapse Analytics

تلميح

جرب Data Factory في Microsoft Fabric، وهو حل تحليلي متكامل للمؤسسات. يغطي Microsoft Fabric كل شيء بدءا من حركة البيانات إلى علم البيانات والتحليلات في الوقت الحقيقي والمعلومات المهنية وإعداد التقارير. تعرف على كيفية بدء إصدار تجريبي جديد مجانا!

يوفر هذا البرنامج التعليمي خطوات لاستخدام PowerShell لتوفير وقت تشغيل تكامل خدمات تكاملAzure-SQL Server Integration Services (SSIS) في Azure Data Factory (ADF). يدعم Azure-SSIS IR التالي:

  • تشغيل الحزم المنشورة في كتالوج SSIS (SSISDB) المستضاف من خادم Azure SQL Database /المثيل المُدار (Project Deployment Model)
  • تشغيل الحزم التي نُشرت في نظام الملفات أو ملفات Azure أو قاعدة بيانات SQL Server (MSDB) المستضافة من المثيل المُدار Azure SQL (Package Deployment Model)

بعد توفير Azure-SSIS IR، يمكن استخدام أدوات مألوفة لنشر وتشغيل الحزم الخاصة بك في Azure. تم تمكين Azure بالفعل لهذه الأدوات وتتضمن SQL Server Data Tools (SSDT) وSQL Server Management Studio (SSMS) وأدوات مساعدة سطر الأوامر مثل dtutil وAzureDTExec.

للحصول على معلومات مفاهيمية حول Azure-SSIS IRs، يرجى الرجوع إلى نظرة عامة على وقت تشغيل تكامل Azure-SSIS.

إشعار

توضح هذه المقالة استخدام Azure PowerShell لإعداد Azure-SSIS IR. لاستخدام بوابة Azure أو تطبيق Azure Data Factory لإعداد Azure-SSIS IR، يرجى مراجعة البرنامج التعليمي: إعداد Azure-SSIS IR.

في هذا البرنامج التعليمي، سوف نتعلم:

  • إنشاء data factory.
  • إنشاء وقت تشغيل تكامل Azure-SSIS.
  • بدء وقت تشغيل تكامل Azure-SSIS.
  • مراجعة النص كاملاً.
  • نشر حزمة SSIS.

المتطلبات الأساسية

إشعار

نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. للبدء، راجع تثبيت Azure PowerShell. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

  • اشتراك Azure. في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

  • خادم Azure SQL Database أو مثيل مُدار (اختياري). في حالة عدم امتلاك مجموعة موارد بالفعل، فيجب إنشاء مجموعة في مدخل Azure قبل المواصلة. سيقوم Data Factory بدوره في إنشاء مثيل SSISDB على خادم قاعدة البيانات هذا.

    نوصي بإنشاء خادم قاعدة البيانات في نفس منطقة Azure المستخدمة لوقت تشغيل التكامل. يتيح هذا التكوين لوقت تشغيل التكامل كتابة سجلات التنفيذ في SSISDB دون الوصول إلى مناطق Azure.

    ضع هذه النقاط في الاعتبار:

    • استنادًا إلى خادم قاعدة البيانات المحدد، يمكن إنشاء مثيل SSISDB نيابة عنك كقاعدة بيانات واحدة، كجزء من مجموعة مرنة، أو في مثيل مُدار. ويمكن الوصول إليه في شبكة عامة أو عن طريق الانضمام إلى شبكة ظاهرية. للحصول على إرشادات حول اختيار نوع خادم قاعدة البيانات لاستضافة SSISDB، يرجى مراجعة مقارنة SQL Database وSQL Managed Instance.

      في حالة استخدام خادم Azure SQL Database مع قواعد جدار حماية IP / نقاط نهاية خدمة الشبكة الظاهرية أو مثيل مُدار بنقطة نهاية خاصة لاستضافة SSISDB، أو عند الحاجة إلى الوصول إلى البيانات المحلية دون تكوين وقت تشغيل التكامل المستضاف ذاتيًا، يلزمك الانضمام من خلال Azure-SSIS IR الخاص بك إلى شبكة ظاهرية. لمزيد من المعلومات، يرجى مراجعة إنشاء Azure-SSIS IR في شبكة ظاهرية.

    • تأكد من تمكين الإعداد السماح بالوصول إلى خدمات Azure لخادم قاعدة البيانات. لا ينطبق هذا الإعداد عند استخدام خادم Azure SQL Database مع قواعد جدار حماية IP / نقاط نهاية خدمة الشبكة الظاهرية أو مثيل مُدار بنقطة نهاية خاصة لاستضافة SSISDB. لمزيد من المعلومات، يرجى مراجعة تأمين Azure SQL Database. لتمكين هذا الإعداد باستخدام PowerShell، يرجى مراجعة New-AzSqlServerFirewallRule.

    • أضف عنوان IP لجهاز العميل، أو مجموعة من عناوين IP التي تتضمن عنوان IP لجهاز العميل، إلى قائمة عناوين IP للعميل في إعدادات جدار الحماية لخادم قاعدة البيانات. لمزيد من المعلومات، يرجى مراجعة قواعد جدار الحماية على مستوى خادم Azure SQL Database ومستوى قاعدة البيانات.

    • يمكنك الاتصال بخادم قاعدة البيانات باستخدام مصادقة SQL مع بيانات اعتماد مسؤول الخادم، أو باستخدام مصادقة Microsoft Entra مع الهوية المدارة المعينة من قبل النظام/المستخدم لمصنع البيانات الخاص بك. بالنسبة لهذا الأخير، تحتاج إلى إضافة الهوية المدارة المعينة من قبل النظام/المستخدم لمصنع البيانات الخاص بك إلى مجموعة Microsoft Entra مع أذونات الوصول إلى خادم قاعدة البيانات. لمزيد من المعلومات، راجع إنشاء وقت تشغيل تكامل Azure-SSIS باستخدام مصادقة Microsoft Entra.

    • تأكد من أن خادم قاعدة البيانات الخاص بك لا يحتوي على مثيل SSISDB بالفعل. لا يدعم توفير Azure-SSIS IR استخدام مثيل SSISDB موجود.

  • Azure PowerShell. لتشغيل البرنامج النصي PowerShell لإعداد Azure-SSIS IR، يجب اتباع الإرشادات الموجودة في تثبيت وتكوينAzure PowerShell .

إشعار

للحصول على قائمة بمناطق Azure التي يتوفر فيها Azure Data Factory وAzure-SSIS IR حالياً، يرجى مراجعة مصنع بيانات Azure وتوافرAzure-SSIS IR حسب المنطقة.

فتح Windows PowerShell ISE

فتح بيئة البرمجة النصية المتكاملة لـ Windows PowerShell (ISE) بأذونات المسؤول.

إنشاء المتغيرات

نسخ البرنامج النصي التالي إلى ISE. تحديد قيم المتغيرات.

### Azure Data Factory info
# If your input contains a PSH special character (for example, "$"), precede it with the escape character "`" (for example, "`$")
$SubscriptionName = "[your Azure subscription name]"
$ResourceGroupName = "[your Azure resource group name]"
# Data factory name - Must be globally unique
$DataFactoryName = "[your data factory name]"
# For supported regions, see https://azure.microsoft.com/global-infrastructure/services/?products=data-factory&regions=all
$DataFactoryLocation = "EastUS"

### Azure-SSIS Integration Runtime info; this is a Data Factory compute resource for running SSIS packages
$AzureSSISName = "[your Azure-SSIS IR name]"
$AzureSSISDescription = "[your Azure-SSIS IR description]"
# For supported regions, see https://azure.microsoft.com/global-infrastructure/services/?products=data-factory&regions=all
$AzureSSISLocation = "EastUS"
# For supported node sizes, see https://azure.microsoft.com/pricing/details/data-factory/ssis/
$AzureSSISNodeSize = "Standard_D8_v3"
# 1-10 nodes are currently supported
$AzureSSISNodeNumber = 2 
# Azure-SSIS IR edition/license info: Standard or Enterprise 
$AzureSSISEdition = "Standard" # Standard by default, although Enterprise lets you use advanced/premium features on your Azure-SSIS IR
# Azure-SSIS IR hybrid usage info: LicenseIncluded or BasePrice
$AzureSSISLicenseType = "LicenseIncluded" # LicenseIncluded by default, while BasePrice lets you bring your existing SQL Server license with Software Assurance to earn cost savings from Azure Hybrid Benefit (AHB) option
# For a Standard_D1_v2 node, up to 4 parallel executions per node are supported, but for other nodes, up to (2 x number of cores) are currently supported
$AzureSSISMaxParallelExecutionsPerNode = 8
# Custom setup info: Standard/express custom setups
$SetupScriptContainerSasUri = "" # OPTIONAL to provide a SAS URI of blob container for standard custom setup where your script and its associated files are stored
$ExpressCustomSetup = "[RunCmdkey|SetEnvironmentVariable|InstallAzurePowerShell|SentryOne.TaskFactory|oh22is.SQLPhonetics.NET|oh22is.HEDDA.IO|KingswaySoft.IntegrationToolkit|KingswaySoft.ProductivityPack|Theobald.XtractIS|AecorSoft.IntegrationService|CData.Standard|CData.Extended or leave it empty]" # OPTIONAL to configure an express custom setup without script

### SSISDB info
$SSISDBServerEndpoint = "[your server name.database.windows.net or managed instance name.public.DNS prefix.database.windows.net,3342 or leave it empty if you're not using SSISDB]" # WARNING: If you use SSISDB, please ensure that there is no existing SSISDB on your database server, so we can prepare and manage one on your behalf    
$SSISDBServerAdminUserName = "[your server admin username for SQL authentication]"
$SSISDBServerAdminPassword = "[your server admin password for SQL authentication]"
# For the basic pricing tier, specify "Basic", not "B" - For standard/premium/elastic pool tiers, specify "S0", "S1", "S2", "S3", etc., see https://learn.microsoft.com/azure/sql-database/sql-database-resource-limits-database-server
$SSISDBPricingTier = "[Basic|S0|S1|S2|S3|S4|S6|S7|S9|S12|P1|P2|P4|P6|P11|P15|…|ELASTIC_POOL(name = <elastic_pool_name>) for SQL Database or leave it empty for SQL Managed Instance]"

### Self-hosted integration runtime info - This can be configured as a proxy for on-premises data access 
$DataProxyIntegrationRuntimeName = "" # OPTIONAL to configure a proxy for on-premises data access 
$DataProxyStagingLinkedServiceName = "" # OPTIONAL to configure a proxy for on-premises data access 
$DataProxyStagingPath = "" # OPTIONAL to configure a proxy for on-premises data access 

تسجيل الدخول وتحديد اشتراكك

لتسجيل الدخول وتحديد اشتراك Azure الخاص بك، يجب إضافة التعليمات البرمجية التالية إلى البرنامج النصي:

Connect-AzAccount
Select-AzSubscription -SubscriptionName $SubscriptionName

التحقق من الاتصال بخادم قاعدة البيانات

للتحقق من الاتصال، إضافة البرنامج النصي التالي:

# Validate only if you're using SSISDB
if(![string]::IsNullOrEmpty($SSISDBServerEndpoint))
{
    $SSISDBConnectionString = "Data Source=" + $SSISDBServerEndpoint + ";User ID=" + $SSISDBServerAdminUserName + ";Password=" + $SSISDBServerAdminPassword    
    $sqlConnection = New-Object System.Data.SqlClient.SqlConnection $SSISDBConnectionString;
    Try
    {
        $sqlConnection.Open();
    }
    Catch [System.Data.SqlClient.SqlException]
    {
        Write-Warning "Cannot connect, exception: $_";
        Write-Warning "Please make sure the server you specified has already been created. Do you want to proceed? [Y/N]"
        $yn = Read-Host
        if(!($yn -ieq "Y"))
        {
            Return;
        } 
    }
}

لإنشاء مثيلAzure SQL Database كجزء من البرنامج النصي، يرجى مراجعة المثال التالي. تعيين قيم للمتغيرات التي لم تُعرف بالفعل (على سبيل المثالSSISDBServerName، FirewallIPAddress).

New-AzSqlServer -ResourceGroupName $ResourceGroupName `
    -ServerName $SSISDBServerName `
    -Location $DataFactoryLocation `
    -SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $SSISDBServerAdminUserName, $(ConvertTo-SecureString -String $SSISDBServerAdminPassword -AsPlainText -Force))    

New-AzSqlServerFirewallRule -ResourceGroupName $ResourceGroupName `
    -ServerName $SSISDBServerName `
    -FirewallRuleName "ClientIPAddress_$today" -StartIpAddress $FirewallIPAddress -EndIpAddress $FirewallIPAddress

New-AzSqlServerFirewallRule -ResourceGroupName $ResourceGroupName -ServerName $SSISDBServerName -AllowAllAzureIPs

إنشاء مجموعة موارد

إنشاء مجموعة موارد Azure باستخدام أمر New-AzResourceGroup. مجموعة الموارد عبارة عن حاوية منطقية يتم فيها توزيع موارد Azure وإدارتها كمجموعة.

إذا كانت مجموعة الموارد الخاصة بك موجودة بالفعل، فلا يجب نسخ هذا الرمز إلى البرنامج النصي الخاص بك.

New-AzResourceGroup -Location $DataFactoryLocation -Name $ResourceGroupName

إنشاء مصدرًا للبيانات

تشغيل الأمر التالي لإنشاء data factory:

Set-AzDataFactoryV2 -ResourceGroupName $ResourceGroupName `
    -Location $DataFactoryLocation `
    -Name $DataFactoryName

إنشاء وقت تشغيل تكامل Azure-SSIS

لإنشاء وقت تشغيل التكامل Azure-SSIS الذي يقوم بتشغيل حزم SSIS في Azure، يجب تشغيل الأوامر التالية. في حالة عدم استخدام SSISDB، فيمكن حذف معلمات CatalogServerEndpoint وCatalogPricingTier وCatalogAdminCredential.

Set-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName `
    -DataFactoryName $DataFactoryName `
    -Name $AzureSSISName `
    -Description $AzureSSISDescription `
    -Type Managed `
    -Location $AzureSSISLocation `
    -NodeSize $AzureSSISNodeSize `
    -NodeCount $AzureSSISNodeNumber `
    -Edition $AzureSSISEdition `
    -LicenseType $AzureSSISLicenseType `
    -MaxParallelExecutionsPerNode $AzureSSISMaxParallelExecutionsPerNode

# Add CatalogServerEndpoint, CatalogPricingTier, and CatalogAdminCredential parameters if you're using SSISDB
if(![string]::IsNullOrEmpty($SSISDBServerEndpoint))
{
    $secpasswd = ConvertTo-SecureString $SSISDBServerAdminPassword -AsPlainText -Force
    $serverCreds = New-Object System.Management.Automation.PSCredential($SSISDBServerAdminUserName, $secpasswd)

    Set-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName `
        -DataFactoryName $DataFactoryName `
        -Name $AzureSSISName `
        -CatalogServerEndpoint $SSISDBServerEndpoint `
        -CatalogPricingTier $SSISDBPricingTier `
        -CatalogAdminCredential $serverCreds
}

# Add custom setup parameters if you use standard/express custom setups
if(![string]::IsNullOrEmpty($SetupScriptContainerSasUri))
{
    Set-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName `
        -DataFactoryName $DataFactoryName `
        -Name $AzureSSISName `
        -SetupScriptContainerSasUri $SetupScriptContainerSasUri
}
if(![string]::IsNullOrEmpty($ExpressCustomSetup))
{
    if($ExpressCustomSetup -eq "RunCmdkey")
    {
        $addCmdkeyArgument = "YourFileShareServerName or YourAzureStorageAccountName.file.core.windows.net"
        $userCmdkeyArgument = "YourDomainName\YourUsername or azure\YourAzureStorageAccountName"
        $passCmdkeyArgument = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourPassword or YourAccessKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.CmdkeySetup($addCmdkeyArgument, $userCmdkeyArgument, $passCmdkeyArgument)
    }
    if($ExpressCustomSetup -eq "SetEnvironmentVariable")
    {
        $variableName = "YourVariableName"
        $variableValue = "YourVariableValue"
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.EnvironmentVariableSetup($variableName, $variableValue)
    }
    if($ExpressCustomSetup -eq "InstallAzurePowerShell")
    {
        $moduleVersion = "YourAzModuleVersion"
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.AzPowerShellSetup($moduleVersion)
    }
    if($ExpressCustomSetup -eq "SentryOne.TaskFactory")
    {
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourLicenseKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }
    if($ExpressCustomSetup -eq "oh22is.SQLPhonetics.NET")
    {
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourLicenseKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }
    if($ExpressCustomSetup -eq "oh22is.HEDDA.IO")
    {
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup)
    }
    if($ExpressCustomSetup -eq "KingswaySoft.IntegrationToolkit")
    {
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourLicenseKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }
    if($ExpressCustomSetup -eq "KingswaySoft.ProductivityPack")
    {
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourLicenseKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }    
    if($ExpressCustomSetup -eq "Theobald.XtractIS")
    {
        $jsonData = Get-Content -Raw -Path YourLicenseFile.json
        $jsonData = $jsonData -replace '\s',''
        $jsonData = $jsonData.replace('"','\"')
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString($jsonData)
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }
    if($ExpressCustomSetup -eq "AecorSoft.IntegrationService")
    {
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourLicenseKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }
    if($ExpressCustomSetup -eq "CData.Standard")
    {
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourLicenseKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }
    if($ExpressCustomSetup -eq "CData.Extended")
    {
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourLicenseKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }    
    # Create an array of one or more express custom setups
    $setups = New-Object System.Collections.ArrayList
    $setups.Add($setup)

    Set-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName `
        -DataFactoryName $DataFactoryName `
        -Name $AzureSSISName `
        -ExpressCustomSetup $setups
}

# Add self-hosted integration runtime parameters if you configure a proxy for on-premises data access
if(![string]::IsNullOrEmpty($DataProxyIntegrationRuntimeName) -and ![string]::IsNullOrEmpty($DataProxyStagingLinkedServiceName))
{
    Set-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName `
        -DataFactoryName $DataFactoryName `
        -Name $AzureSSISName `
        -DataProxyIntegrationRuntimeName $DataProxyIntegrationRuntimeName `
        -DataProxyStagingLinkedServiceName $DataProxyStagingLinkedServiceName

    if(![string]::IsNullOrEmpty($DataProxyStagingPath))
    {
        Set-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName `
            -DataFactoryName $DataFactoryName `
            -Name $AzureSSISName `
            -DataProxyStagingPath $DataProxyStagingPath
    }
}

بدء وقت تشغيل تكامل Azure-SSIS

لبدء Azure-SSIS IR، تشغيل الأوامر التالية:

write-host("##### Starting #####")
Start-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName `
    -DataFactoryName $DataFactoryName `
    -Name $AzureSSISName `
    -Force

write-host("##### Completed #####")
write-host("If any cmdlet is unsuccessful, please consider using -Debug option for diagnostics.")                                  

إشعار

باستثناء أي وقت إعداد مخصص، يجب أن تنتهي هذه العملية في غضون 5 دقائق.

في حالة استخدام SSISDB، فستتصل خدمة Data Factory بخادم قاعدة البيانات لتحضير SSISDB.

عند توفير Azure-SSIS IR، يُثبت أيضًا Access Redistributable وAzure Feature Pack لـ SSIS. توفر هذه المكونات اتصالاً بملفات Excel وملفات Access ومصادر بيانات Azure المتنوعة، بالإضافة إلى مصادر البيانات التي تدعمها المكونات المضمنة بالفعل. لمزيد من المعلومات حول المكونات المضمنة / المثبتة مسبقًا، يرجى مراجعة المكونات المضمنة / المثبتة مسبقًا على Azure-SSIS IR. لمزيد من المعلومات حول المكونات الإضافية التي يمكن تثبيتها، يرجى مراجعة إعدادات مخصصة لـ Azure-SSIS IR.

البرنامج النصي الكامل

يقوم البرنامج النصي PowerShell في هذا القسم بتكوين مثيل لـ Azure-SSIS IR الذي يقوم بتشغيل حزم SSIS. بعد تشغيل هذا البرنامج النصي بنجاح، يمكن نشر حزم SSIS وتشغيلها في Azure.

  1. فتح ISE.

  2. في موجه الأوامر ISE، تشغيل الأمر التالي:

    Set-ExecutionPolicy Unrestricted -Scope CurrentUser
    
  3. نسخ برنامج PowerShell النصي في هذا القسم إلى ISE.

  4. تقديم القيم المناسبة لجميع المعلمات في بداية البرنامج النصي.

  5. قم بتشغيل البرنامج النصي

### Azure Data Factory info
# If your input contains a PSH special character, e.g. "$", precede it with the escape character "`" like "`$"
$SubscriptionName = "[your Azure subscription name]"
$ResourceGroupName = "[your Azure resource group name]"
# Data factory name - Must be globally unique
$DataFactoryName = "[your data factory name]"
# For supported regions, see https://azure.microsoft.com/global-infrastructure/services/?products=data-factory&regions=all
$DataFactoryLocation = "EastUS"

### Azure-SSIS Integration Runtime info - This is a Data Factory compute resource for running SSIS packages
$AzureSSISName = "[your Azure-SSIS IR name]"
$AzureSSISDescription = "[your Azure-SSIS IR description]"
# For supported regions, see https://azure.microsoft.com/global-infrastructure/services/?products=data-factory&regions=all
$AzureSSISLocation = "EastUS"
# For supported node sizes, see https://azure.microsoft.com/pricing/details/data-factory/ssis/
$AzureSSISNodeSize = "Standard_D8_v3"
# 1-10 nodes are currently supported
$AzureSSISNodeNumber = 2 
# Azure-SSIS IR edition/license info: Standard or Enterprise 
$AzureSSISEdition = "Standard" # Standard by default, while Enterprise lets you use advanced/premium features on your Azure-SSIS IR
# Azure-SSIS IR hybrid usage info: LicenseIncluded or BasePrice
$AzureSSISLicenseType = "LicenseIncluded" # LicenseIncluded by default, while BasePrice lets you bring your existing SQL Server license with Software Assurance to earn cost savings from Azure Hybrid Benefit (AHB) option
# For a Standard_D1_v2 node, up to 4 parallel executions per node are supported, but for other nodes, up to (2 x the number of cores) are currently supported
$AzureSSISMaxParallelExecutionsPerNode = 8
# Custom setup info: Standard/express custom setups
$SetupScriptContainerSasUri = "" # OPTIONAL to provide a SAS URI of blob container for standard custom setup where your script and its associated files are stored
$ExpressCustomSetup = "[RunCmdkey|SetEnvironmentVariable|InstallAzurePowerShell|SentryOne.TaskFactory|oh22is.SQLPhonetics.NET|oh22is.HEDDA.IO|KingswaySoft.IntegrationToolkit|KingswaySoft.ProductivityPack|Theobald.XtractIS|AecorSoft.IntegrationService|CData.Standard|CData.Extended or leave it empty]" # OPTIONAL to configure an express custom setup without script

### SSISDB info
$SSISDBServerEndpoint = "[your server name.database.windows.net or managed instance name.public.DNS prefix.database.windows.net,3342 or leave it empty if you're not using SSISDB]" # WARNING: If you want to use SSISDB, ensure that there is no existing SSISDB on your database server, so we can prepare and manage one on your behalf    
$SSISDBServerAdminUserName = "[your server admin username for SQL authentication]"
$SSISDBServerAdminPassword = "[your server admin password for SQL authentication]"
# For the basic pricing tier, specify "Basic", not "B" - For standard/premium/elastic pool tiers, specify "S0", "S1", "S2", "S3", etc., see https://learn.microsoft.com/azure/sql-database/sql-database-resource-limits-database-server
$SSISDBPricingTier = "[Basic|S0|S1|S2|S3|S4|S6|S7|S9|S12|P1|P2|P4|P6|P11|P15|…|ELASTIC_POOL(name = <elastic_pool_name>) for SQL Database or leave it empty for SQL Managed Instance]"

### Self-hosted integration runtime info - This can be configured as a proxy for on-premises data access 
$DataProxyIntegrationRuntimeName = "" # OPTIONAL to configure a proxy for on-premises data access 
$DataProxyStagingLinkedServiceName = "" # OPTIONAL to configure a proxy for on-premises data access 
$DataProxyStagingPath = "" # OPTIONAL to configure a proxy for on-premises data access 

### Sign in and select subscription
Connect-AzAccount
Select-AzSubscription -SubscriptionName $SubscriptionName

### Validate the connection to database server
# Validate only if you're using SSISDB
if(![string]::IsNullOrEmpty($SSISDBServerEndpoint))
{
    $SSISDBConnectionString = "Data Source=" + $SSISDBServerEndpoint + ";User ID=" + $SSISDBServerAdminUserName + ";Password=" + $SSISDBServerAdminPassword    
    $sqlConnection = New-Object System.Data.SqlClient.SqlConnection $SSISDBConnectionString;
    Try
    {
        $sqlConnection.Open();
    }
    Catch [System.Data.SqlClient.SqlException]
    {
        Write-Warning "Cannot connect, exception: $_";
        Write-Warning "Please make sure the server you specified has already been created. Do you want to proceed? [Y/N]"
        $yn = Read-Host
        if(!($yn -ieq "Y"))
        {
            Return;
        } 
    }
}

### Create a data factory
Set-AzDataFactoryV2 -ResourceGroupName $ResourceGroupName `
    -Location $DataFactoryLocation `
    -Name $DataFactoryName

### Create an integration runtime
Set-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName `
    -DataFactoryName $DataFactoryName `
    -Name $AzureSSISName `
    -Description $AzureSSISDescription `
    -Type Managed `
    -Location $AzureSSISLocation `
    -NodeSize $AzureSSISNodeSize `
    -NodeCount $AzureSSISNodeNumber `
    -Edition $AzureSSISEdition `
    -LicenseType $AzureSSISLicenseType `
    -MaxParallelExecutionsPerNode $AzureSSISMaxParallelExecutionsPerNode

# Add CatalogServerEndpoint, CatalogPricingTier, and CatalogAdminCredential parameters if you're using SSISDB
if(![string]::IsNullOrEmpty($SSISDBServerEndpoint))
{
    $secpasswd = ConvertTo-SecureString $SSISDBServerAdminPassword -AsPlainText -Force
    $serverCreds = New-Object System.Management.Automation.PSCredential($SSISDBServerAdminUserName, $secpasswd)

    Set-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName `
        -DataFactoryName $DataFactoryName `
        -Name $AzureSSISName `
        -CatalogServerEndpoint $SSISDBServerEndpoint `
        -CatalogPricingTier $SSISDBPricingTier `
        -CatalogAdminCredential $serverCreds
}

# Add custom setup parameters if you use standard/express custom setups
if(![string]::IsNullOrEmpty($SetupScriptContainerSasUri))
{
    Set-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName `
        -DataFactoryName $DataFactoryName `
        -Name $AzureSSISName `
        -SetupScriptContainerSasUri $SetupScriptContainerSasUri
}
if(![string]::IsNullOrEmpty($ExpressCustomSetup))
{
    if($ExpressCustomSetup -eq "RunCmdkey")
    {
        $addCmdkeyArgument = "YourFileShareServerName or YourAzureStorageAccountName.file.core.windows.net"
        $userCmdkeyArgument = "YourDomainName\YourUsername or azure\YourAzureStorageAccountName"
        $passCmdkeyArgument = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourPassword or YourAccessKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.CmdkeySetup($addCmdkeyArgument, $userCmdkeyArgument, $passCmdkeyArgument)
    }
    if($ExpressCustomSetup -eq "SetEnvironmentVariable")
    {
        $variableName = "YourVariableName"
        $variableValue = "YourVariableValue"
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.EnvironmentVariableSetup($variableName, $variableValue)
    }
    if($ExpressCustomSetup -eq "InstallAzurePowerShell")
    {
        $moduleVersion = "YourAzModuleVersion"
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.AzPowerShellSetup($moduleVersion)
    }
    if($ExpressCustomSetup -eq "SentryOne.TaskFactory")
    {
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourLicenseKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }
    if($ExpressCustomSetup -eq "oh22is.SQLPhonetics.NET")
    {
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourLicenseKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }
    if($ExpressCustomSetup -eq "oh22is.HEDDA.IO")
    {
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup)
    }
    if($ExpressCustomSetup -eq "KingswaySoft.IntegrationToolkit")
    {
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourLicenseKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }
    if($ExpressCustomSetup -eq "KingswaySoft.ProductivityPack")
    {
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourLicenseKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }    
    if($ExpressCustomSetup -eq "Theobald.XtractIS")
    {
        $jsonData = Get-Content -Raw -Path YourLicenseFile.json
        $jsonData = $jsonData -replace '\s',''
        $jsonData = $jsonData.replace('"','\"')
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString($jsonData)
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }
    if($ExpressCustomSetup -eq "AecorSoft.IntegrationService")
    {
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourLicenseKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }
    if($ExpressCustomSetup -eq "CData.Standard")
    {
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourLicenseKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }
    if($ExpressCustomSetup -eq "CData.Extended")
    {
        $licenseKey = New-Object Microsoft.Azure.Management.DataFactory.Models.SecureString("YourLicenseKey")
        $setup = New-Object Microsoft.Azure.Management.DataFactory.Models.ComponentSetup($ExpressCustomSetup, $licenseKey)
    }    
    # Create an array of one or more express custom setups
    $setups = New-Object System.Collections.ArrayList
    $setups.Add($setup)

    Set-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName `
        -DataFactoryName $DataFactoryName `
        -Name $AzureSSISName `
        -ExpressCustomSetup $setups
}

# Add self-hosted integration runtime parameters if you configure a proxy for on-premises data access
if(![string]::IsNullOrEmpty($DataProxyIntegrationRuntimeName) -and ![string]::IsNullOrEmpty($DataProxyStagingLinkedServiceName))
{
    Set-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName `
        -DataFactoryName $DataFactoryName `
        -Name $AzureSSISName `
        -DataProxyIntegrationRuntimeName $DataProxyIntegrationRuntimeName `
        -DataProxyStagingLinkedServiceName $DataProxyStagingLinkedServiceName

    if(![string]::IsNullOrEmpty($DataProxyStagingPath))
    {
        Set-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName `
            -DataFactoryName $DataFactoryName `
            -Name $AzureSSISName `
            -DataProxyStagingPath $DataProxyStagingPath
    }
}

### Start integration runtime
write-host("##### Starting #####")
Start-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName `
    -DataFactoryName $DataFactoryName `
    -Name $AzureSSISName `
    -Force

write-host("##### Completed #####")
write-host("If any cmdlet is unsuccessful, please consider using -Debug option for diagnostics.")   

مراقبة Azure-SSIS IR الخاص بك وإدارته

للحصول على معلومات حول مراقبة Azure-SSIS IR وإدارته، يرجى مراجعة:

توزيع حزمة SSIS

في حالة كنت من مستخدمي SSISDB، يمكن نشر الحزم الخاصة بك فيه وتشغيلها على Azure-SSIS IR الخاص بك باستخدام أدوات SSDT أو SSMS التي تدعم Azure. تتصل هذه الأدوات بخادم قاعدة البيانات عبر نقطة نهاية الخادم الخاصة به:

  • بالنسبة إلى خادم Azure SQL Database، يكون تنسيق نقطة نهاية الخادم هو <server name>.database.windows.net.
  • بالنسبة إلى مثيل مُدار ذي نقطة نهاية خاصة، يكون تنسيق نقطة نهاية الخادم هو <server name>.<dns prefix>.database.windows.net.
  • بالنسبة إلى مثيل مُدار بنقطة نهاية عامة، يكون تنسيق نقطة نهاية الخادم هو <server name>.public.<dns prefix>.database.windows.net,3342.

في حالة استخدام SSISDB، يمكن نشر الحزم الخاصة بك في نظام الملفات أو Azure Files أو MSDB المستضاف بواسطة Azure SQL Managed Instance وتشغيلها على Azure-SSIS IR الخاص بك باستخدام dtutil وAzureDTExec أدوات مساعدة لسطر الأوامر.

لمزيد من المعلومات، يرجى مراجعة نشر مشاريع / حزم SSIS.

في كلتا الحالتين، يمكن أيضًا تشغيل الحزم التي نُشرت على Azure-SSIS IR باستخدام نشاط تنفيذ حزمة SSIS في تدفقات Data Factory. لمزيد من المعلومات، يرجى مراجعة استدعاء تنفيذ حزمة SSIS كنشاط Data Factory من الدرجة الأولى.

لمزيد من وثائق SSIS، يرجى مراجعة:

في هذا البرنامج التعليمي، نتعلم طريقة القيام بما يأتي:

  • إنشاء data factory.
  • إنشاء وقت تشغيل تكامل Azure-SSIS.
  • بدء وقت تشغيل تكامل Azure-SSIS.
  • مراجعة النص كاملاً.
  • نشر حزمة SSIS.

للتعرف على تخصيص وقت تشغيل تكامل Azure-SSIS، يرجى مراجعة المقالة التالية: