Funkcie bez servera s funkciou Spring Cloud

1. Úvod

V tomto tutoriále sa dozvieme, ako používať funkciu Spring Cloud.

Postavíme a spustíme lokálnu jednoduchú funkciu Spring Cloud a potom ju nasadíme do AWS.

2. Nastavenie funkcie Spring Cloud

Na začiatok implementujme úplne od nuly a otestujme jednoduchý projekt s dvoma funkciami pomocou rôznych prístupov:

  • Obracač reťazcov jednoduchou metódou
  • A zdravší používajúci vyhradenú triedu

2.1. Maven závislosti

Prvá vec, ktorú musíme urobiť, je zahrnúť spring-cloud-starter-function-web závislosť. Toto bude fungovať ako náš lokálny adaptér a prinesie potrebné závislosti na miestne spustenie našej funkcie:

 org.springframework.cloud spring-cloud-starter-function-web 1.0.1.RELEASE 

Zostaňte naladení, keď to nasadzujeme do AWS, trochu to upravíme.

2.2. Zápis funkcie Spring Cloud

S funkciou Spring Cloud, môžeme vystaviť @Beantypu Funkcia, Spotrebiteľ alebo Dodávateľ ako jednotlivé metódy:

@SpringBootApplication verejná trieda CloudFunctionApplication {public static void main (String [] args) {SpringApplication.run (CloudFunctionApplication.class, args); } @Bean public Function reverseString () {návratová hodnota -> nový StringBuilder (hodnota) .reverse (). ToString (); }}

Rovnako ako v tomto kóde, aj tu môžeme funkciu spätného reťazca vystaviť ako Funkcia, ktoré môže naša cieľová funkčná platforma vyvolať.

2.3. Lokálne testovanie funkcie reverzného reťazca

The spring-cloud-starter-function-web vystavuje funkciu ako koncový bod HTTP. Potom, čo spustíme CloudFunctionApplication, môžeme zvlniť náš cieľ a otestovať ho lokálne:

curl localhost: 8080 / reverseString -H "Content-Type: text / plain" -d "užívateľ Baeldung"

Upozorňujeme, že koncovým bodom je názov fazule.

A ako sa dalo očakávať, dostaneme obrátený reťazec ako výstup:

resU gnudleaB

2.4. Funkcia skenovania jarného mraku v balíkoch

Okrem vystavenia našej metódy ako a @Bean, náš softvér by sme mohli napísať aj ako triedy, ktoré implementujú funkčné rozhranie Funkcia:

public class Greeter implementuje funkciu {@Override public String apply (String s) {return "Hello" + s + "a vitajte v Spring Cloud Function !!!"; }}

Potom môžeme určiť balíčky, v ktorých sa majú vyhľadať príslušné fazule application.properties:

spring.cloud.function.scan.packages = com.baeldung.spring.cloudfunction.functions

2.5. Lokálne testovanie funkcie Greeter

Opäť môžeme spustiť aplikáciu a pomocou curl otestovať Zdravší funkcia:

curl localhost: 8080 / greeter -H "Content-Type: text / plain" -d "svet"

Všimnite si, že koncový bod je názov triedy, ktorá implementuje funkčné rozhranie.

A nie je prekvapením, že dostaneme očakávaný pozdrav späť:

Ahoj svet, vitaj vo funkcii Spring Cloud !!!

3. Funkcia Spring Cloud na AWS

Vďaka čomu je funkcia Spring Cloud tak silná, že môžeme vytvárať funkcie podporujúce Spring, ktoré sú cloudovo agnostické. Samotná funkcia nemusí vedieť, ako sa volala, ani o prostredí, v ktorom je nasadená. Napríklad, tohto pozdravu môžeme ľahko nasadiť na AWS, Azure alebo Google Cloud platformu bez zmeny akejkoľvek obchodnej logiky.

Pretože AWS Lambda je jedným z populárnych riešení bez servera, zamerajme sa na to, ako do neho nasadiť našu aplikáciu.

Už teda nečakajme a nasaďme našu funkciu do cloudu!

3.1. Maven závislosti

Pamätajte na spring-cloud-starter-function-web závislosť, ktorú sme pôvodne pridali. Teraz je čas to zmeniť.

V závislosti od toho, kde budeme spúšťať funkciu Spring Cloud, musíme pridať príslušnú závislosť.

Pre AWS použijeme spring-cloud-function-adapter-aws:

 org.springframework.cloud spring-cloud-function-adapter-aws 

Ďalej pridajme požadované závislosti AWS na spracovanie udalostí Lambda:

 com.amazonaws aws-lambda-java-events 2.0.2 poskytované com.amazonaws aws-lambda-java-core 1.1.0 poskytnuté 

Nakoniec, pretože ideme nahrať artefakt vygenerovaný zostavením maven do AWS Lambda, musíme vytvoriť artefakt, ktorý je v tieni, čo znamená, že má všetky závislosti explodované ako súbory jednotlivých tried namiesto pohárov.

The spring-boot-thin-layout závislosť nám pomáha zmenšiť veľkosť artefaktu vylúčením niektorých závislostí, ktoré nie sú potrebné:

   org.apache.maven.plugins maven-deploy-plugin true org.springframework.boot spring-boot-maven-plugin org.springframework.boot.experimentálny spring-boot-thin-layout 1.0.10.RELEASE org.apache.maven. pluginy maven-shad-plugin nepravdivé pravdivé aws 

3.2. Manipulátory AWS

Ak chceme náš reverzátor reťazcov vystaviť znova prostredníctvom požiadavky HTTP, potom sa Spring Cloud Function AWS dodáva s SpringBootRequestHandler. Implementuje AWS RequestHandler a zodpovedá za odoslanie žiadosti AWS do našej funkcie.

verejná trieda MyStringHandlers rozširuje SpringBootRequestHandler {}

Funkcia Spring Cloud Function AWS sa dodáva aj s SpringBootStreamHandler a FunctionInvokingS3EventHandler ako ďalšie príklady

Teraz sa môže zdať trochu čudné, že MyStringHandlers je iba prázdna trieda, ale hrá dôležitú úlohu v oboch funkciách ako vstupný bod funkcie Lambda a tiež v definovaní jej vstupných a výstupných typov.

Ako uvidíme na snímke obrazovky nižšie, poskytneme úplný názov tejto triedy do vstupného poľa Handler na konfiguračnej stránke AWS Lambda.

3.3. Ako AWS vie, ktorú cloudovú funkciu má vyvolať?

Ako sa ukázalo, aj keď máme v našej aplikácii viac ako jednu funkciu Spring Cloud, AWS môže vyvolať iba jeden z nich.

V ďalšej časti zadáme názov funkcie cloudu v premennej prostredia s názvom FUNCTION_NAME na konzole AWS.

4. Vložte funkciu do AWS a otestujte

Nakoniec postavme našu nádobu s mavenom a potom ju nahrajte pomocou používateľského rozhrania konzoly AWS.

4.1. Vytvorte funkciu Lambda v konzole AWS a nakonfigurujte ju

Na stránke konzoly AWS Lambda môžeme v sekcii Funkčný kód zvoliť a Java 8 runtime a jednoducho kliknite Nahrať.

Potom musíme uviesť v Psovod do poľa zadajte úplný názov triedy, ktorá implementuje SpringBootRequestHandleralebo com.baeldung.spring.cloudfunction.MyStringHandlers v našom prípade:

A potom v premenných prostredia ukážeme, ktorú fazuľu funkcie Spring vyvolať prostredníctvom FUNCTION_NAME premenná prostredia:

A keď sme to urobili, je čas, aby sme otestovali funkciu Lambda vytvorením testovacej udalosti a dodaním vzorového reťazca:

4.2. Testovanie funkcie na AWS

Teraz, my Uložiť náš test, potom kliknite na Test tlačidlo.

A ako sa dalo očakávať, dostaneme rovnaký výstup ako to, čo sme dostali, keď sme funkciu testovali lokálne:

4.3. Testovanie ďalšej funkcie

Pamätajte, že v našej aplikácii máme ešte jednu funkciu: pozdravujem. Uistite sa, že to funguje tiež.

Zmeníme FUNCTION_NAME premenná prostredia na pozdravujem:

Kliknite na ikonu Uložiť tlačidlo a nakoniec tlačidlo Test tlačidlo znova:

5. Záver

Stručne povedané, hoci v počiatočných fázach, Funkcia Spring Cloud je mocný nástroj na oddelenie obchodnej logiky od ľubovoľného konkrétneho bežeckého cieľa.

Rovnaký kód s ním môže bežať ako webový koncový bod, na cloudovej platforme alebo ako súčasť streamu. Odoberá všetky dopravné podrobnosti a infraštruktúru, umožňuje vývojárovi uchovať si všetky známe nástroje a procesy a sústredí sa pevne na obchodnú logiku.

Ako vždy, pozrite si zdrojový kód tohto tutoriálu na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found