{"id":52562,"date":"2019-11-11T00:00:00","date_gmt":"2019-11-10T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/stroim-sobstvennyj-serverless-na-osnove-fn"},"modified":"2020-02-18T14:00:19","modified_gmt":"2020-02-18T11:00:19","slug":"stroim-sobstvennyj-serverless-na-osnove-fn","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","title":{"rendered":"Ehitus oma serverless'i p\u00f5hjal Fn","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Ehitus oma serverless&#039;i p\u00f5hjal Fn\" src=\"\/wp-content\/uploads\/2019\/11\/e24cdf9b43a3323d617f33b2c1b44e51.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%91%D0%B5%D1%81%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F\">Serverivabad arvutused<\/a><\/noindex> \u2014 on \u00fcks silmapaistvamaid suundi pilvandmet\u00f6\u00f6tluses. Peamine t\u00f6\u00f6p\u00f5him\u00f5te on see, et infrastruktuuri haldamine ei kuulu DevOps'ide, vaid teenusepakkujate \u00fclesanne. Ressursside skaleerimine kohandub automaatselt koormuse j\u00e4rgi ja omab suurt muutmiskiirus.<\/p>\n<p><\/p>\n<p>\u0414\u0440\u0443\u0433\u0430\u044f \u043e\u0431\u0449\u0430\u044f \u0447\u0435\u0440\u0442\u0430 \u2014 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044f \u043a \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 &#171;\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430&#187; (FaaS).<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Ajalooliselt oli esimene pilveteenuste pakkuja, kes pakkus FaaS-i AWS Lambda kaudu, Amazon, kust see nimi p\u00e4rineb. Ka teised pilveteenuste pakkujad pakuvad analooge:<\/p>\n<p><\/p>\n<ul>\n<li>Google'i Cloud Functions<\/li>\n<li>Microsofti Azure Functions<\/li>\n<\/ul>\n<p><\/p>\n<p>K\u00f5ik need ettev\u00f5tted pakuvad serverivabu arvutusi, automaatset skaleerimist ja tasu ainult tegelikult kasutatud ressursside eest, kuid nad seovad kliente oma patenteeritud toote juurde. Siiski on olemas tasuta avatud l\u00e4htekoodiga alternatiive serverivabade arvutuste korraldamiseks. Tasub m\u00e4rkida:<\/p>\n<p><\/p>\n<ul>\n<li>Platvormi <noindex><a rel=\"nofollow\" href=\"https:\/\/openwhisk.apache.org\/\">Apache OpenWhisk<\/a><\/noindex>, mida arendab IBM-i inkubaator,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.spring.io\/spring-cloud-function\/\">Spring Cloud Functions<\/a><\/noindex>, mis on osa piisavalt rikkalikust Spring Frameworki \u00f6kos\u00fcsteemist, mida saab kasutada ka AWS Lambda, Azure Functions ja OpenWhiski fasadina,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fnproject\">Fn projekt<\/a><\/noindex>, mida toetab Oracle.<\/li>\n<\/ul>\n<p><\/p>\n<p>K\u00f5ik need on t\u00e4ielikult s\u00f5ltumatud pilvedest, st need on installitavad igas pilves, sealhulgas teie enda, avalikus v\u00f5i erapilves, ja muidugi ka Exoscale'is.<\/p>\n<p><\/p>\n<h2 id=\"kak-proekt-fn-ustroen\">Kuidas Fn projekt on \u00fcles ehitatud<\/h2>\n<p><\/p>\n<p>Fn p\u00f5hineb t\u00e4ielikult Docker'il, koosnedes kahest p\u00f5hikomponendist:<\/p>\n<p><\/p>\n<ul>\n<li>CLI programmist, mis on m\u00f5eldud Fn infrastruktuuri k\u00f5igi aspektide haldamiseks ja koost\u00f6\u00f6ks Fn serveriga,<\/li>\n<li>Ise Fn server, tavaline rakendus, mis on pakitud Docker konteinerisse.<\/li>\n<\/ul>\n<p><\/p>\n<p>Fn'is juurutatud funktsioonid t\u00f6\u00f6tavad samuti eraldi konteinerites, mis v\u00f5imaldab toetada v\u00e4ga mitmeid programmeerimiskeeli, n\u00e4iteks\u2026 Clojure!<\/p>\n<p><\/p>\n<p>Funktsioonide argumendid edastatakse standardse sisendi (STDIN) kaudu, tulemused kirjutatakse standardsele v\u00e4ljundile (STDOUT). Kui argumendid v\u00f5i tagastatavad v\u00e4\u00e4rtused ei ole lihtsad v\u00e4\u00e4rtused (n\u00e4iteks JSON objekt), saavad need olla muudetud abistava kihi kaudu, mille Fn pakub funktsioonide arendamise komplektina (FDK).<\/p>\n<p><\/p>\n<p>Kasutamiseks on saadaval sisseehitatud mallide komplektid, mis lihtsustavad FaaSi juurutamist erinevatel keeltes ja nende versioonides (Go, erinevad Java versioonid, Python jne).<\/p>\n<p><\/p>\n<p>FaaSi loomine on lihtne, j\u00e4rgides seda skeemi:<\/p>\n<p><\/p>\n<ul>\n<li>Jurutame funktsiooni CLI Fn abil: loodakse rakenduse konfigureerimisfail Fn jaoks, mis p\u00f5hineb valitud mallil.<\/li>\n<li>V\u00e4ljastame oma funktsiooni, taas CLI Fn abil: konteineripilt paigutatakse mingisse registrisse, p\u00e4rast mida serverit teavitakse selle pildi olemasolust ja asukohast.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ehitus oma serverless&#039;i p\u00f5hjal Fn\" src=\"\/wp-content\/uploads\/2019\/11\/5add8b58c80e976cd61a156fdd0fba11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Funktsioonide kohaletoimetamise p\u00f5him\u00f5te Fn-s<\/em><\/p>\n<p><\/p>\n<h2 id=\"lokalnaya-ustanovka-i-testirovanie-besservernyh-funkciy\">Kohalik installatsioon ja serverivaba funktsioonide testimine<\/h2>\n<p><\/p>\n<p>Alustame Fn-i installimist kohalikus masinas. Esiteks installitakse Docker, nagu Fn n\u00f5uab. Eeldame, et oleme Debian\/Ubuntu s\u00fcsteemil:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo apt-get update\n$ sudo apt-get install docker.io<\/code><\/pre>\n<p><\/p>\n<p>V\u00f5i kasutage oma s\u00fcsteemi jaoks pakihaldurit\/ Dockerit. Seej\u00e4rel saame otse j\u00e4tkata Fn CLI installimisega. N\u00e4iteks curl abil:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl -LSs https:\/\/raw.githubusercontent.com\/fnproject\/cli\/master\/install | sh<\/code><\/pre>\n<p><\/p>\n<p>Kui t\u00f6\u00f6tate OSX-il koos Homebrew'ga, v\u00f5ib minna teist teed:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ brew install fn\n\n==&gt; Laadimine https:\/\/homebrew.bintray.com\/bottles\/fn-0.5.8.high_sierra.bottle.tar.gz\n==&gt; Laadimine aadressilt https:\/\/akamai.bintray.com\/b1\/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb\n######################################################################## 100.0%\n==&gt; Pouring fn-0.5.8.high_sierra.bottle.tar.gz\n  \/usr\/local\/Cellar\/fn\/0.5.8: 5 failid, 16.7MB<\/code><\/pre>\n<p><\/p>\n<p>N\u00fc\u00fcd on k\u00f5ik valmis meie funktsiooni esmaseks juurutamiseks CLI abil. Lihtsuse huvides kasutame sisseehitatud keskkonda, n\u00e4iteks Node'i:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn init --runtime node --trigger http hellonode\n\nFunktsioon luuakse asukohas: \/hellonode\nFunktsiooni aluskood genereeritud.\nfunc.yaml loodud.<\/code><\/pre>\n<p><\/p>\n<p>Loodud saab uus kataloog <code>hellonode<\/code> edasi meie Fn funktsiooni arendamiseks koos m\u00f5nede p\u00f5hikonfigureerimisfailidega. Uues loodud kataloogis saate luua oma rakenduse, j\u00e4rgides teie valitud keele v\u00f5i k\u00e4ituskeskkonna standardeid:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"># \u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441 node \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:\n\n   hellonode\n   \u251c\u2500\u2500 func.js\n   \u251c\u2500\u2500 func.yaml\n   \u2514\u2500\u2500 package.json\n\n# \u0421\u0432\u0435\u0436\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 Java11 \u0442\u0430\u043a\u043e\u0435:\n\n   hellojava11\n   \u251c\u2500\u2500 func.yaml\n   \u251c\u2500\u2500 pom.xml\n   \u2514\u2500\u2500 src\n       \u251c\u2500\u2500 main\n       \u2502   \u2514\u2500\u2500 java\n       \u2502       \u2514\u2500\u2500 com\n       \u2502           \u2514\u2500\u2500 example\n       \u2502               \u2514\u2500\u2500 fn\n       \u2502                   \u2514\u2500\u2500 HelloFunction.java\n       \u2514\u2500\u2500 test\n           \u2514\u2500\u2500 java\n               \u2514\u2500\u2500 com\n                   \u2514\u2500\u2500 example\n                       \u2514\u2500\u2500 fn\n                           \u2514\u2500\u2500 HelloFunctionTest.java<\/code><\/pre>\n<p><\/p>\n<p>Fn loob projekti algstruktuuri ning loob faili <code>func.yaml<\/code>, mis sisaldab Fn-ile vajalikke seadistusi, ja seab valitud keeles koodimalli.<\/p>\n<p><\/p>\n<p>Node'i k\u00e4ituskeskkonna puhul t\u00e4hendab see:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cat hellonode\/func.js\n\nconst fdk=require('@fnproject\/fdk');\n\nfdk.handle(function(input){\n  let name = 'World';\n  if (input.name) {\n    name = input.name;\n  }\n  return {'message': 'Hello ' + name}\n})<\/code><\/pre>\n<p><\/p>\n<p>N\u00fc\u00fcd kontrollime kiiresti meie funktsiooni kohalikult, et n\u00e4ha, kuidas k\u00f5ik t\u00f6\u00f6tab.<\/p>\n<p><\/p>\n<p>K\u00f5igepealt k\u00e4ivitame Fn serveri. Nagu juba mainitud, on Fn server Docker konteiner, seega peale k\u00e4ivitamist see l\u00e4heb ja v\u00f5tab pildi Docker registrist.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn start -d                    # k\u00e4ivitame kohaliku serveri taustal\n\nUnable to find image 'fnproject\/fnserver:latest' locally\nlatest: Pulling from fnproject\/fnserver\nff3a5c916c92: Pull complete\n1a649ea86bca: Pull complete\nce35f4d5f86a: Pull complete\n\n...\n\nStatus: Downloaded newer image for fnproject\/fnserver:latest\n668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5<\/code><\/pre>\n<p><\/p>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0435\u0435 \u043d\u0430\u0434\u043e &#171;\u0432\u044b\u043a\u0430\u0442\u0438\u0442\u044c&#187;. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f <code>rakenduse nimi<\/code>: Fn-is peavad k\u00f5ik rakendused olema m\u00e4\u00e4ratud seotud funktsioonide nimedena.<\/p>\n<p><\/p>\n<p>Fn CLI otsib faili <code>func.yaml<\/code> praeguses kataloogis, mis rakendub funktsiooni seadistamiseks. Seega peame esmalt minema meie katalooge <code>hellonode<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cd hellonode\n$ fn deploy --app fnexo --local  # v\u00e4ljastame funktsiooni kohalikult, rakenduse nimi - fnexo.\n                                 # parameeter local ei lae pilti kaugregistrisse,\n                                 # k\u00e4ivitades selle otse\n\nDeploying hellonode to app: fnexo\nBumped to version 0.0.2\nBuilding image nfrankel\/hellonode:0.0.3 .\nUpdating function hellonode using image nfrankel\/hellonode:0.0.3...\nSuccessfully created app:  fnexo\nSuccessfully created function: hellonode with nfrankel\/hellonode:0.0.3\nSuccessfully created trigger: hellonode-trigger<\/code><\/pre>\n<p><\/p>\n<p>Nagu n\u00e4ha k\u00e4su v\u00e4ljundist, luuakse uus Docker konteineri pilt, mis sisaldab meie funktsiooni. Funktsioon on kutsumiseks valmis ning meil on kaks v\u00f5imalust selle tegemiseks:<\/p>\n<p><\/p>\n<ul>\n<li>kasutades k\u00e4sku Fn <code>invoke<\/code><\/li>\n<li>kutsudes otse l\u00e4bi <code>http<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Kutsumine <code>invoke<\/code> Fn emuleerib lihtsalt HTTP t\u00f6\u00f6d testide jaoks, mis on kiire testimise jaoks mugav:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn invoke fnexo hellonode      # kutsume fnexo rakenduse hellonode funktsiooni\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>Funktsiooni otse kutsumiseks tuleb teada t\u00e4ielikku URL-i:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl http:\/\/localhost:8080\/t\/fnexo\/hellonode-trigger\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>Fn server pakub oma funktsioone porti 8080 kaudu ning n\u00e4ib, et funktsiooni URL vastab skeemile <code>t\/app\/function<\/code>, \u043d\u043e \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e. \u0427\u0435\u0440\u0435\u0437 HTTP \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0430 \u0447\u0435\u0440\u0435\u0437 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 trigger, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e &#171;\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442&#187; \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0422\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0432 <code>`func.yml<\/code> projekti:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">schema_version: 20180708\nname: hellonode\nversion: 0.0.3\nruntime: node\nentrypoint: node func.js\nformat: json\ntriggers:\n- name: hellonode-trigger\n  type: http\n  source: \/hellonode-trigger    # triggeri URL<\/code><\/pre>\n<p><\/p>\n<p>Saame muuta triggeri nime, et see vastaks funktsiooni nimele, see lihtsustab k\u00f5ike:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">triggers:\n- name: hellonode-trigger\n  type: http\n  source: \/hellonode    # vastab funktsiooni nimele<\/code><\/pre>\n<p><\/p>\n<p>Seej\u00e4rel k\u00e4ivitame funktsiooni tarnimise veel kord ja kutsume selle uue triggeri kaudu:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn deploy --app fnexo hellonode --local\n$ curl http:\/\/localhost:8080\/t\/fnexo\/hellonode\n\n{\"message\":\"Tere, maailm\"}<\/code><\/pre>\n<p><\/p>\n<p>K\u00f5ik t\u00f6\u00f6tab! On just \u00f5ige aeg minna reaalsesse katsetusse ja avaldada meie FaaS serveris!<\/p>\n<p><\/p>\n<h2 id=\"ustanovka-servisov-besservernyh-funkciy-na-sobstvennoy-infrastrukture\">Serverless funktsioonide teenuste seadistamine oma infrastruktuuris<\/h2>\n<p><\/p>\n<p>Alustame kiiresti virtuaalse masina seadistamist Exoscale'i CLI abil. Kui te ei ole seda veel seadistanud \u2014 v\u00f5ite kasutada <noindex><a rel=\"nofollow\" href=\"https:\/\/community.exoscale.com\/documentation\/tools\/exoscale-command-line-interface\/\">meie kiire k\u00e4ivitamise juhendit<\/a><\/noindex>. See on suurep\u00e4rane t\u00f6\u00f6riist, mis t\u00f5stab veelgi teie tootlikkust. <strong>\u00c4rge unustage seadistada reeglit port 8080 avamiseks Security Group'is!<\/strong> J\u00e4rgmised k\u00e4sud k\u00e4ivitavad puhta virtuaalse masina, mis on valmis meie funktsioonide majutamiseks:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ exo firewall create fn-securitygroup\n$ exo firewall add fn-securitygroup ssh --my-ip\n$ exo firewall add fn-securitygroup -p tcp -P 8080-8080 -c 0.0.0.0\/0\n$ exo vm create fn-server -s fn-securitygroup<\/code><\/pre>\n<p><\/p>\n<p>Seej\u00e4rel saab SSH kaudu virtuaalsesse masinasse siseneda ja paigaldada kaugserveri Fn:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ exo ssh fn-server\n\nHosti '185.19.30.175 (185.19.30.175)' autentsust ei saa kehtestada.\nECDSA v\u00f5tme s\u00f5rmej\u00e4lg on SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.\nKas soovite j\u00e4tkata \u00fchenduse loomist (jah\/ei)? jah\nHoiatus: '185.19.30.175' (ECDSA) on p\u00fcsivalt lisatud tuntud hostide nimekirja.\nTere tulemast Ubuntu 18.04 LTS (GNU\/Linux 4.15.0-20-generic x86_64)<\/code><\/pre>\n<p><\/p>\n<p>Seej\u00e4rel paigaldame Docker'i ja Fn serveri samuti nagu seda tehti kohalikul masinal ning k\u00e4ivitame serveri:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo apt-get update\n$ sudo apt-get install docker.io\n$ sudo systemctl start docker\n$ curl -LSs https:\/\/raw.githubusercontent.com\/fnproject\/cli\/master\/install | sh\n$ sudo fn start\n\n...\n\n    ______\n   \/ ____\/___\n  \/ \/_  \/ __ \n \/ __\/ \/ \/ \/ \/ \/\n\/_\/   \/_\/ \/_\/\n    v0.3.643<\/code><\/pre>\n<p><\/p>\n<p>Fn on valmis funktsioonide vastuv\u00f5tmiseks! Funktsioonide sihtimise jaoks kaugserverisse kasutame k\u00e4sku <code>deploy<\/code> kohalikust arvutist, j\u00e4ttes v\u00e4lja flagi <code>--local<\/code>.<\/p>\n<p><\/p>\n<p>Lisaks peab Fn n\u00e4itama Fn serveri ja Docker'i registri asukohta. Need parameetrid v\u00f5ivad olla m\u00e4\u00e4ratud keskkonnamuutujate kaudu <code>FN_API_URL<\/code> ja <code>FN_REGISTRY<\/code> vastavalt, kuid pakutakse ka mugavamat viisi konfiguratsioonide loomise ja haldamise h\u00f5lbustamiseks.<\/p>\n<p><\/p>\n<p>Fn kontekst, mida kasutatakse rakenduse juurutamiseks, nimetatakse <code>context<\/code>. J\u00e4rgmine k\u00e4sk loob konteksti:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn create context exoscale --provider default --api-url http:\/\/185.19.30.175:8080 --registry nfrankel<\/code><\/pre>\n<p><\/p>\n<p>Saate vaadata saadaval olevaid kontekste nii:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn list contexts\n\nCURRENT NAME      PROVIDER      API URL                      REGISTRY\n    default       default       http:\/\/localhost:8080\/\n    exoscale      default       http:\/\/185.19.30.175:8080    nfrankel\n<\/code><\/pre>\n<p><\/p>\n<p>Ja l\u00fclituda just loodud konteksti nii:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"> $ fn use context exoscale\n\n N\u00fc\u00fcd kasutame konteksti: exoscale<\/code><\/pre>\n<p><\/p>\n<p>Alates sellest kohast hakkab Fn funktsioonide tarnimine laadima Docker'i pilte, kasutades valitud kontot DockerHub'is (minu puhul \u2014 <code>nfrankel<\/code>), seej\u00e4rel teavitab see kaugserverit (sel juhul \u2014 <code>http:\/\/185.19.30.175:8080<\/code>) viimase pildi asukohast ja versioonist, mis sisaldab teie funktsiooni.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn deploy --app fnexo .   # k\u00e4ivitatakse lokaalselt hellonode kataloogist\n\nFunktsiooni laadimine asukohas: \/.\nLaadimine hellonode rakendusse: fnexo\nVersioon t\u00f5stetud 0.0.5-ni\nPildi koostamine nfrankel\/hellonode:0.0.5 .<\/code><\/pre>\n<p><\/p>\n<p>L\u00f5puks:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl http:\/\/185.19.30.175:8080\/t\/fnexo\/hellonode\n\n{\"message\":\"Tere, maailm\"}<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ehitus oma serverless&#039;i p\u00f5hjal Fn\" src=\"\/wp-content\/uploads\/2019\/11\/51a7b88cd6bf4953740cfac937b0acc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Fn baasil serverless arvutustes funktsiooni eluts\u00fckkel<\/em><\/p>\n<p><\/p>\n<h2 id=\"preimuschestva-besservernyh-vychisleniy-na-svoih-moschnostyah\">Serverless arvutuste eelised oma infrastruktuuris<\/h2>\n<p><\/p>\n<p>Serverless arvutused on mugav lahendus s\u00f5ltumatute rakenduse osade kiireks juurutamiseks, mis suhtlevad keerukamate rakenduste v\u00f5i mikroteenustega.<\/p>\n<p><\/p>\n<p>Sageli on sellel peidetud kulu seondumine valitud teenusepakkujaga, mis s\u00f5ltuvalt konkreetsest kasutusjuhtumist ja mahust v\u00f5ib viia k\u00f5rgemate kuludeni ja v\u00e4henenud paindlikkuseni tulevikus.<\/p>\n<p><\/p>\n<p>Multicloud ja h\u00fcbriidsete pilvearhitektuuride korral tekivad samuti probleemid, kuna v\u00f5ib lihtsalt sattuda olukorda, kus soovite kasutada serverless arvutusi, kuid ettev\u00f5tte poliitika t\u00f5ttu v\u00f5ib see olla v\u00f5imatu.<\/p>\n<p><\/p>\n<p>Fn on kasutajas\u00f5bralik, see v\u00f5ib pakkuda peaaegu samasugust FaaS liidest, v\u00e4ikeste kuludega. See vabastab teid igasugustest teenusepakkuja sidemetest, seda saab installida lokaalselt v\u00f5i valida sobivas pilveteenuse pakkujas. Samuti on vabade valikute osas programmeerimiskeeles.<\/p>\n<p><\/p>\n<p>Artiklis tutvustatakse vaid Fn p\u00f5hialuseid, kuid oma t\u00e4itmisv\u00f5imekeskkonna loomine on piisavalt lihtne ning \u00fcldist arhitektuuri saab laiendada Fn tasakaalustaja kasutamisega v\u00f5i paigutades Fn proksi taha kaitseks.<\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/475044\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0411\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u2014 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0445 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u0439 \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u2014 \u0437\u0430\u0431\u043e\u0442\u0430 \u043d\u0435 DevOps\u2019\u043e\u0432, \u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0443\u0441\u043b\u0443\u0433. \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0414\u0440\u0443\u0433\u0430\u044f \u043e\u0431\u0449\u0430\u044f \u0447\u0435\u0440\u0442\u0430 \u2014 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044f \u043a \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 &#171;\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430&#187; [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-52562","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0442\u0440\u043e\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 serverless \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Fn | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-11-10T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:00:19+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47K\u00fclastame enda serverlessi Fn baasil | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0442\u0440\u043e\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 serverless \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Fn | ProHoster","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-11-10T21:00:00+00:00","article:modified_time":"2020-02-18T11:00:19+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52562","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 04:03:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:41:24","updated":"2026-01-24 04:03:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/52562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=52562"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/52562\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=52562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=52562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=52562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}