Usuwanie plików z FTP przy pomocy Azure Data Factory. Podejście drugie.

Ze względu na popularność postu, postanowiłem zrobić drugie podejście do usuwania plików z FTP przy pomocy pipeline’u Data Factory. W mojej ocenie poniższe rozwiązane jest lepsze, łatwiejsze do debugowania i zapewnia większą kontrolę.

Najpierw, przeczytaj mój artykuł o Key Vault. Jest to istotna wiedza, ponieważ będziesz tam przechowywał poświadczenia do serwera FTP. Stwórz Key Vault i dwa sekrety – jeden dla loginu i jeden dla hasła. Możesz też przechować tam adres IP serwera.

Następnie, stwórz nową Azure Function:

image

 

Wybierz v2:

image

Następnie wklej poniższy kod do rozwiązania:

 

Zauważ, że login i hasło są pobierane z Key Vault:

 

Adresy URL sekretów są w zmiennych środowiskowych, które możesz znaleźć w ustawieniach aplikacji:

image

 

W “applications settings”:

image

 

Następny krok to publikacja funkcji. Możesz to zrobić z poziomu Visual Studio klikając prawym na projekt:

image

Przy publikacji wybierz Azure Function, do której chcesz wysłać swoja funkcję lub stwórz nową. Pamiętaj, żeby zarejestrować swoją aplikację w Azure Active Directory i dodać ją do access policies w Key Vault.

Po publikacji, przejdź do Azure Portal i przetestuj swoją funkcję. Oczekuje pliku JSON w takim formacie:

 

Jeśli nie działa, możesz to naprawić tutaj.

Kolejnym krokiem jest wywołanie zapytania POST z poziomu Data Factory. Aby to zrobić, użyjesz web activity. Najpierw, skopiuj URL funkcji. Aby go zdobyć, przejdź do głównej menu funkcji i kliknij na </> Get Function URL:

image

 

Skopiuj adres URL:

image

 

Jesteś gotowy, żeby przejść do Data Factory. Stwórz web activity:

image

 

Następnie dodaj adres URL i Body w odpowiednim formacie.Możesz nawet dodać elementy dynamiczne:

image

I to tyle! Teraz możesz wywołać funkcję i sprawdzić jak działa.

Michał

One thought on “Usuwanie plików z FTP przy pomocy Azure Data Factory. Podejście drugie.

  1. Jedna rzecz, o której należy pamiętać!
    Web activity ma wbudowany timeout, który wynosi 1 minutę!
    I co gorsza, nie da się tego zmienić.
    Jeśli logika w Azure Functions będzie trwała dłużej niż jedną minutę, activity zakońćzy się statusem błedu.

    Na pocieszenie dodam, że Azure Functions nie powinien zakończyć logiki aplikacji, dobrnie ona do końca. Jednak ADF zgłaszając błąd pójdzie do następnych kroków (jeśli tak wynika z jego przepływów).
    Niestety dokumentacja o tym wspomina, ale oczywiście łatwo to przeoczyć 🙁
    https://docs.microsoft.com/en-us/azure/data-factory/control-flow-web-activity

    “The activity will timeout at 1 minute with an error if it does not receive a response from the endpoint.”

    p.s. “Dodaj komentarz” zamienia mi wszystkie litery na wielkie… to zamierzone? 😀

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *