ssis service integration sftp ftps

El mejor método para archivos SFTP o FTPS a través de SSIS



sftp ssis (5)

Solo quería proporcionar una actualización sobre lo que decidimos hacer para resolver los problemas de SFTP en SSIS. Aquí está el desglose de lo que sucedió:

  1. Inicialmente traté de usar Putty y algunos archivos por lotes para cargar archivos, pero fue difícil capturar errores. Además, estaba almacenando nuestras credenciales de SFTP en archivos de texto sin cifrar, ya que formaba parte de los scripts de carga de Putty.

  2. Compramos una licencia de CozyRoc para nuestro servidor SSIS por un par de cientos de dólares al año y estoy completamente satisfecho con los resultados del uso de sus productos. Con el producto de CozyRoc, la tarea de flujo de control genera errores si hay algún problema con la carga. Como también tengo varios programadores SSIS junior en mi equipo, les resultó más fácil comprender cómo configurar la tarea de control de flujo que utilizar el método de scripts Putty. Y, por último, la contraseña se cifra con el cifrado nativo de SSIS para proteger los datos confidenciales. Ya no tengo contraseñas almacenadas en texto claro en mi servidor.

Revisé algunas de las otras bibliotecas de terceros que se recomendaron en esta pregunta, pero parece que CozyRoc era el más barato de los proveedores y también tenían algunas otras tareas de SSIS que he podido usar en mi equipo de BI. Gracias, CozyRoc!

Esta pregunta originalmente se preguntó cuál es el mejor método para cargar archivos a través de SFTP o FTPS en SSIS. Ahora solo enumera los pros y los contras de cada solución. Yo personalmente uso la biblioteca SFTP de CozyRoc en estos días, pero he utilizado cada una de las soluciones a continuación en un momento u otro.

BIBLIOTECA COMPONENTE DE SSIS

Método: instale una biblioteca de componentes SSIS de CozyRoc , Codeplex , BizCrypto , PragmaticWorks u otro proveedor en cada servidor de desarrollo y producción, y utilice la tarea SFTP para cargar los archivos.

Pros: Fácil de usar. Se ve, huele y se siente como una tarea normal de SSIS. SSIS también reconoce la contraseña como información confidencial y le permite todas las opciones normales para proteger la información sensible en lugar de simplemente almacenarla en texto claro de una manera no segura. Funciona bien con otras tareas de SSIS, como ForEach Loop Containers. Errores cuando fallan las cargas y las descargas. Funciona bien cuando no se conocen los nombres de los archivos en el sitio FTP remoto para descargar o cuando no se conoce el nombre del archivo para cargar hasta el tiempo de ejecución.

Contras: con la excepción de la solución Codeplex, esto cuesta dinero para licenciar en un entorno de producción. Requiere instalar las bibliotecas en cada máquina de desarrollo y producción. Si se trata de la solución Codeplex, entonces está utilizando un software que no es compatible con ningún proveedor específico. Esto también lo hace dependiente del proveedor para actualizar sus bibliotecas entre cada versión. Por ejemplo, antes de 2008 RTM''d, estaba desarrollando un nuevo servidor en una versión CTP de 2008 y la biblioteca CozyRoc 2005 era incompatible con ella. Eventualmente lanzaron una versión compatible 2008, pero tuve que usar temporalmente la solución de línea de comando para solucionar este problema.

COMMAND LINE SFTP PROGRAM

Método: instale una aplicación SFTP de línea de comandos gratuita, como Putty y WinSCP, y ejecútelo ejecutando un archivo por lotes o una tarea de proceso del sistema operativo. Las instrucciones para hacer esto a través de WinSCP se enumeran aquí .

Pros: Gratis, gratis y gratis. Puede estar seguro de que es seguro si está usando Putty ya que numerosos clientes de GUI FTP parecen usar Putty bajo las cubiertas. Usted DEFINITIVAMENTE sabe que está utilizando SSH2 y no SSH.

Contras: Las dos utilidades de línea de comandos que probé (Putty y Cygwin) requerían almacenar la contraseña de SFTP en una ubicación no segura. No he encontrado una buena manera de capturar fallas o errores al cargar archivos. El proceso no se ve y huele como SSIS. La mayor parte del código está encapsulado en archivos de texto en lugar de SSIS. Difícil de usar si no conoce el nombre exacto del archivo que está cargando o descargando.

UNA 3RD PARTY C # o VB.NET LIBRARY

Método: instale una biblioteca SFTP o FTPS y use una tarea de secuencia de comandos que haga referencia a la biblioteca para cargar los archivos. (Nunca he probado esto, así que voy a adivinar los pros y los contras)

Pros: Probablemente es fácil capturar errores. Debería funcionar bien con las variables, por lo que probablemente sería fácil de usar incluso cuando no se conoce el nombre exacto del archivo que está cargando o descargando.

Contras: es una tarea de script combinada con bibliotecas .NET. Si está utilizando SSIS, entonces probablemente esté más cómodo con las tareas de SSIS que con el código .NET. Las tareas de script también son difíciles de solucionar, ya que no tienen las mismas herramientas y funciones de depuración que los proyectos regulares de .NET. Crea una dependencia en el código de terceros que puede no funcionar entre las diferentes versiones de SQL Server. Para ser justos, probablemente sea más probable que funcione entre diferentes versiones de SQL Server que una biblioteca de tareas de SSIS de un tercero. Otra gran estafa: no he encontrado una biblioteca gratuita de C # o VB.NET que lo haga hasta el momento. Entonces, si alguien sabe de uno, ¡házmelo saber!



Sin componente, puede usar la tarea de script. Ver este enlace

Imports System Imports Microsoft.SqlServer.Dts.Runtime Imports Ftp Imports System.IO Public Class ScriptMain Public Sub Main() Try Dim cm As ConnectionManager = Dts.Connections.Add("FTP") cm.Properties("ServerName").SetValue(cm, Dts.Variables("SFTPServerName").Value.ToString) cm.Properties("ServerUserName").SetValue(cm, Dts.Variables("SFTPLogin").Value.ToString) cm.Properties("ServerPassword").SetValue(cm, Dts.Variables("SFTPPassword").Value.ToString) cm.Properties("ServerPort").SetValue(cm, Dts.Variables("SFTPPortNumber").Value.ToString) cm.Properties("Timeout").SetValue(cm, "0") cm.Properties("ChunkSize").SetValue(cm, "0") ''1000 kb cm.Properties("Retries").SetValue(cm, "0") Dts.Variables("Continue").Value = 0 Dim ftp As FtpClientConnection = New FtpClientConnection(cm.AcquireConnection(Nothing)) Dim FilesList() As String Dim FolderName() As String Dim Separator As String = ";" '' //ServerName/Share1;//ServerName/Share2 : Local copy Dim FolderLocalListSrc As String = Dts.Variables("FolderLocalListSrc").Value.ToString Dim FolderLocalListDst() As String = Split(FolderLocalListSrc, Separator) Dim Counter As Integer ftp.Connect() ftp.GetListing(FolderName, FilesList) If FilesList IsNot Nothing Then Dim FileName As String For Each FileName In FilesList Dim FileToProcess(0) As String Dim FileToMove(0) As String For Counter = 0 To FolderLocalListDst.GetUpperBound(0) FileToProcess(0) = FileName FileToMove(0) = FolderLocalListDst(Counter) + FileName If (File.Exists(FileToMove(0)) = False) Then '' Téléchargement en local ftp.ReceiveFiles(FileToProcess, FolderLocalListDst(Counter), True, True) End If Next '' Upload du fichier dans les archives du FTP ftp.SendFiles(FileToMove, "/Archives", True, False) '' Suppression du fichier à la racine du FTP ftp.DeleteFiles(FileToProcess) Next End If ftp.Close() Dts.TaskResult = Dts.Results.Success Catch ex As Exception Dts.TaskResult = Dts.Results.Failure End Try End Sub End Class


La siguiente secuencia de comandos puede ser una opción en lugar de guardar las credenciales de acceso en un archivo de texto sin cifrar con WINSCP.


La siguiente pregunta podría ser de utilidad:

¿Cuál sería una opción recomendada del componente SSIS para realizar tareas SFTP o FTPS?

Cozyroc:

Debería ser fácil probar la disponibilidad del protocolo ssh configurando el servidor para "permitir solo SSHv2" y probar. ¿Has intentado preguntarle al departamento de ventas de Cozy?

Línea de comando sftp:

El problema del nombre de archivo desconocido podría resolverse mediante scripts / uso de comodines (al menos bajo Cygwin).

Lib de terceros:

¿Por qué necesita una lib de terceros para FTPS? .NET ha admitido este protocolo desde 2.0 o más.

http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.enablessl.aspx