{"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\/hu\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","title":{"rendered":"Saj\u00e1t serverless megold\u00e1st \u00e9p\u00edt\u00fcnk az Fn alapj\u00e1ul","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Saj\u00e1t serverless megold\u00e1st \u00e9p\u00edt\u00fcnk az Fn alapj\u00e1ul\" 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\">Szerver n\u00e9lk\u00fcli sz\u00e1m\u00edt\u00e1stechnika<\/a><\/noindex> \u2014 az egyik legkiemelked\u0151bb tendencia a felh\u0151sz\u00e1m\u00edt\u00e1stechnik\u00e1ban. A m\u0171k\u00f6d\u00e9s f\u0151 elve az, hogy az infrastrukt\u00fara nem a DevOps-ok, hanem a szolg\u00e1ltat\u00f3 felel\u0151ss\u00e9ge. Az er\u0151forr\u00e1sok automatikusan igazodnak a terhel\u00e9shez \u00e9s magas sebess\u00e9ggel sk\u00e1l\u00e1zhat\u00f3k.<\/p>\n<p><\/p>\n<p>Egy m\u00e1sik k\u00f6z\u00f6s jellemz\u0151 a k\u00f3d minimaliz\u00e1l\u00e1s\u00e1ra \u00e9s \u00f6sszpontos\u00edt\u00e1s\u00e1ra val\u00f3 t\u00f6rekv\u00e9s, ez\u00e9rt a szerver n\u00e9lk\u00fcli sz\u00e1m\u00edt\u00e1st n\u00e9ha \"f\u00fcggv\u00e9ny mint szolg\u00e1ltat\u00e1s\"-nak (FaaS) nevezik.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>T\u00f6rt\u00e9nelmileg az els\u0151 felh\u0151szolg\u00e1ltat\u00f3, aki FaaS-t k\u00edn\u00e1lt az AWS Lambda r\u00e9v\u00e9n, az Amazon volt, ahonnan a n\u00e9v is sz\u00e1rmazik. M\u00e1s felh\u0151szolg\u00e1ltat\u00f3k is k\u00edn\u00e1lnak anal\u00f3g szolg\u00e1ltat\u00e1sokat:<\/p>\n<p><\/p>\n<ul>\n<li>Google Cloud Functions<\/li>\n<li>Microsoft Azure Functions<\/li>\n<\/ul>\n<p><\/p>\n<p>Mindegyik c\u00e9g szerver n\u00e9lk\u00fcli sz\u00e1m\u00edt\u00e1stechnik\u00e1t, automatikus sk\u00e1l\u00e1z\u00e1st \u00e9s csak a t\u00e9nylegesen haszn\u00e1lt er\u0151forr\u00e1sok\u00e9rt t\u00f6rt\u00e9n\u0151 fizet\u00e9st k\u00edn\u00e1l, de ezzel egy\u00fctt \u00fcgyfeleiket saj\u00e1t z\u00e1rt term\u00e9k\u00fckh\u00f6z k\u00f6tik. Ennek ellen\u00e9re l\u00e9teznek ingyenes, ny\u00edlt forr\u00e1sk\u00f3d\u00fa alternat\u00edv\u00e1k a szerver n\u00e9lk\u00fcli sz\u00e1m\u00edt\u00e1stechnika szervez\u00e9s\u00e9re. \u00c9rdemes megeml\u00edteni:<\/p>\n<p><\/p>\n<ul>\n<li>Az <noindex><a rel=\"nofollow\" href=\"https:\/\/openwhisk.apache.org\/\">Apache OpenWhisk<\/a><\/noindex>, amelyet az IBM inkub\u00e1tor\u00e1ban fejlesztenek,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.spring.io\/spring-cloud-function\/\">Spring Cloud Functions<\/a><\/noindex>, a Spring Framework gazdag \u00f6kosziszt\u00e9m\u00e1j\u00e1nak r\u00e9szek\u00e9nt, amely AWS Lambda, Azure Functions \u00e9s OpenWhisk interf\u00e9szek\u00e9nt is haszn\u00e1lhat\u00f3,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fnproject\">Fn projekt<\/a><\/noindex>, az Oracle t\u00e1mogat\u00e1s\u00e1val.<\/li>\n<\/ul>\n<p><\/p>\n<p>Mindannyian teljesen f\u00fcggetlenek a felh\u0151kt\u0151l, teh\u00e1t b\u00e1rmely felh\u0151be telep\u00edthet\u0151k, bele\u00e9rtve a saj\u00e1t felh\u0151j\u00e9t, nyilv\u00e1nos vagy priv\u00e1t, \u00e9s term\u00e9szetesen az Exoscale-ba is.<\/p>\n<p><\/p>\n<h2 id=\"kak-proekt-fn-ustroen\">Hogyan m\u0171k\u00f6dik az Fn projekt<\/h2>\n<p><\/p>\n<p>Az Fn teljes m\u00e9rt\u00e9kben a Dockerre \u00e9p\u00fcl, k\u00e9t f\u0151 komponensb\u0151l \u00e1ll:<\/p>\n<p><\/p>\n<ul>\n<li>CLI program, amely az Fn infrastrukt\u00far\u00e1j\u00e1nak minden aspektus\u00e1nak kezel\u00e9s\u00e9re szolg\u00e1l, \u00e9s kommunik\u00e1l az Fn szerverrel,<\/li>\n<li>Mag\u00e1nak az Fn-nek a szervere, egy hagyom\u00e1nyos alkalmaz\u00e1s, amely Docker kont\u00e9nerbe van csomagolva.<\/li>\n<\/ul>\n<p><\/p>\n<p>Az Fn-ben telep\u00edtett funkci\u00f3k szint\u00e9n k\u00fcl\u00f6n kont\u00e9nerekben futnak, ami lehet\u0151v\u00e9 teszi sz\u00e1mos programoz\u00e1si nyelv t\u00e1mogat\u00e1s\u00e1t, p\u00e9ld\u00e1ul\u2026 Clojure!<\/p>\n<p><\/p>\n<p>A funkci\u00f3k argumentumai a szabv\u00e1nyos bemenetre (STDIN) ker\u00fclnek, az eredm\u00e9nyek a szabv\u00e1nyos kimenetre (STDOUT) \u00edr\u00f3dnak. Ha az argumentumok vagy a visszat\u00e9r\u00e9si \u00e9rt\u00e9kek nem egyszer\u0171 \u00e9rt\u00e9kek (p\u00e9ld\u00e1ul JSON objektum), akkor a Fn \u00e1ltal biztos\u00edtott funkci\u00f3k fejleszt\u0151i k\u00e9szlete (FDK) r\u00e9v\u00e9n alak\u00edthat\u00f3k \u00e1t.<\/p>\n<p><\/p>\n<p>A k\u00e9nyelem \u00e9rdek\u00e9ben be\u00e9p\u00edtett sablonsorozatok \u00e1llnak rendelkez\u00e9sre, amelyek megk\u00f6nny\u00edtik a FaaS telep\u00edt\u00e9s\u00e9t k\u00fcl\u00f6nb\u00f6z\u0151 nyelveken \u00e9s azok verzi\u00f3in (Go, k\u00fcl\u00f6nb\u00f6z\u0151 Java verzi\u00f3k, Python stb.).<\/p>\n<p><\/p>\n<p>FaaS l\u00e9trehoz\u00e1sa egyszer\u0171, ha k\u00f6vetj\u00fck ezt a s\u00e9m\u00e1t:<\/p>\n<p><\/p>\n<ul>\n<li>A funkci\u00f3 telep\u00edt\u00e9se a CLI Fn haszn\u00e1lat\u00e1val: egy alkalmaz\u00e1skonfigur\u00e1l\u00f3 f\u00e1jl j\u00f6n l\u00e9tre a Fn sz\u00e1m\u00e1ra, amely a v\u00e1lasztott sablonra \u00e9p\u00fcl.<\/li>\n<li>A saj\u00e1t funkci\u00f3nk telep\u00edt\u00e9se szint\u00e9n a CLI Fn haszn\u00e1lat\u00e1val: a kont\u00e9ner k\u00e9p\u00e9t egy adott t\u00e1rol\u00f3ba helyezz\u00fck, majd a szerver \u00e9rtes\u00fcl a k\u00e9p l\u00e9tez\u00e9s\u00e9r\u0151l \u00e9s elhelyez\u00e9s\u00e9r\u0151l.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Saj\u00e1t serverless megold\u00e1st \u00e9p\u00edt\u00fcnk az Fn alapj\u00e1ul\" src=\"\/wp-content\/uploads\/2019\/11\/5add8b58c80e976cd61a156fdd0fba11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>A funkci\u00f3k Fn \u00e1ltali sz\u00e1ll\u00edt\u00e1s\u00e1nak elve<\/em><\/p>\n<p><\/p>\n<h2 id=\"lokalnaya-ustanovka-i-testirovanie-besservernyh-funkciy\">Helyi telep\u00edt\u00e9s \u00e9s tesztel\u00e9s szerver n\u00e9lk\u00fcli funkci\u00f3k eset\u00e9n<\/h2>\n<p><\/p>\n<p>Kezdj\u00fck el a Fn telep\u00edt\u00e9s\u00e9t a helyi g\u00e9pen. El\u0151sz\u00f6r is a Dockert kell telep\u00edteni, ahogy azt a Fn megk\u00f6veteli. Felt\u00e9telezz\u00fck, hogy Debian\/Ubuntu-t haszn\u00e1lunk:<\/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>Vagy haszn\u00e1lhatja a csomagkezel\u0151t \/ a Docker telep\u00edt\u00e9s\u00e9t a rendszer\u00e9nek megfelel\u0151en. Ezut\u00e1n \u00e1tt\u00e9rhet\u00fcnk a Fn CLI telep\u00edt\u00e9s\u00e9re. P\u00e9ld\u00e1ul curl seg\u00edts\u00e9g\u00e9vel:<\/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>Ha OSX-en dolgozik telep\u00edtett Homebrew-jal, m\u00e1s utat is v\u00e1laszthat:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ brew install fn\n\n==&gt; Let\u00f6lt\u00e9s https:\/\/homebrew.bintray.com\/bottles\/fn-0.5.8.high_sierra.bottle.tar.gz\n==&gt; Let\u00f6lt\u00e9s innen: 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 f\u00e1jl, 16.7MB<\/code><\/pre>\n<p><\/p>\n<p>Most minden k\u00e9szen \u00e1ll a funkci\u00f3nk els\u0151 telep\u00edt\u00e9s\u00e9re a CLI seg\u00edts\u00e9g\u00e9vel. A k\u00f6nny\u0171s\u00e9g kedv\u00e9\u00e9rt be\u00e9p\u00edtett futtat\u00f3k\u00f6rnyezetet haszn\u00e1lunk, p\u00e9ld\u00e1ul Node-ot:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn init --runtime node --trigger http hellonode\n\nFunkci\u00f3 l\u00e9trehozva itt: \/hellonode\nFunkci\u00f3 alapanyag gener\u00e1lva.\nfunc.yaml l\u00e9trehozva.<\/code><\/pre>\n<p><\/p>\n<p>\u00daj mappa j\u00f6n l\u00e9tre <code>hellonode<\/code> a Fn funkci\u00f3nk tov\u00e1bbi fejleszt\u00e9s\u00e9hez alapvet\u0151 konfigur\u00e1l\u00f3 f\u00e1jlokkal. Az \u00fajonnan l\u00e9trehozott mapp\u00e1n bel\u00fcl l\u00e9trehozhatja alkalmaz\u00e1s\u00e1t, k\u00f6vetve a v\u00e1lasztott nyelv vagy futtat\u00f3k\u00f6rnyezet szabv\u00e1nyait:<\/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>A Fn l\u00e9trehozza a projekt kezdeti strukt\u00far\u00e1j\u00e1t, l\u00e9trehozza a f\u00e1jlt <code>func.yaml<\/code>, amely a Fn sz\u00e1m\u00e1ra sz\u00fcks\u00e9ges be\u00e1ll\u00edt\u00e1sokat tartalmaz, \u00e9s l\u00e9trehozza a kiv\u00e1lasztott nyelvhez tartoz\u00f3 k\u00f3d sablonj\u00e1t.<\/p>\n<p><\/p>\n<p>Node futtat\u00f3k\u00f6rnyezet eset\u00e9n ez azt jelenti:<\/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>Most gyorsan tesztelni fogjuk a funkci\u00f3nkat helyben, hogy l\u00e1ssuk, hogyan m\u0171k\u00f6dik minden.<\/p>\n<p><\/p>\n<p>El\u0151sz\u00f6r elind\u00edtjuk a Fn szervert. Amint m\u00e1r eml\u00edtett\u00fck, a Fn szerver egy Docker kont\u00e9ner, teh\u00e1t a futtat\u00e1s ut\u00e1n automatikusan let\u00f6lti a k\u00e9pet a Docker registry-b\u0151l.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn start -d                    # lok\u00e1lis szerver h\u00e1tt\u00e9rben val\u00f3 ind\u00edt\u00e1sa\n\nNincs 'fnproject\/fnserver:latest' k\u00e9p helyben\nlatest: Let\u00f6lt\u00e9s a fnproject\/fnserver-b\u0151l\nff3a5c916c92: Let\u00f6lt\u00e9s befejezve\n1a649ea86bca: Let\u00f6lt\u00e9s befejezve\nce35f4d5f86a: Let\u00f6lt\u00e9s befejezve\n\n...\n\n\u00c1llapot: \u00dajabb k\u00e9p let\u00f6ltve a fnproject\/fnserver:latest-hez\n668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5<\/code><\/pre>\n<p><\/p>\n<p>A funkci\u00f3nk elind\u00edt\u00e1s\u00e1hoz azt \"ki kell dobni\". Ehhez sz\u00fcks\u00e9g van <code>az alkalmaz\u00e1s neve<\/code>: a Fn-ben minden alkalmaz\u00e1st n\u00e9vt\u00e9rk\u00e9nt kell megadni a kapcsol\u00f3d\u00f3 funkci\u00f3khoz.<\/p>\n<p><\/p>\n<p>A Fn CLI f\u00e1jlt fog keresni <code>func.yaml<\/code> a jelenlegi mapp\u00e1ban, amely a funkci\u00f3 be\u00e1ll\u00edt\u00e1s\u00e1hoz haszn\u00e1lhat\u00f3. Teh\u00e1t el\u0151sz\u00f6r l\u00e9pj\u00fcnk \u00e1t a mapp\u00e1nkba <code>hellonode<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cd hellonode\n$ fn deploy --app fnexo --local  # helyben ind\u00edtja a funkci\u00f3t, az alkalmaz\u00e1s neve - fnexo.\n                                 # a local param\u00e9ter nem t\u00f6lti fel a k\u00e9pet a t\u00e1voli registry-be,\n                                 # k\u00f6zvetlen\u00fcl ind\u00edtva\n\nHellonode telep\u00edt\u00e9se az alkalmaz\u00e1shoz: fnexo\nFriss\u00edtve: 0.0.2 verzi\u00f3ra\nK\u00e9p \u00e9p\u00edt\u00e9se nfrankel\/hellonode:0.0.3 .\nFunkci\u00f3 friss\u00edt\u00e9se: hellonode a nfrankel\/hellonode:0.0.3 k\u00e9ppel...\nSikeresen l\u00e9trehozva az alkalmaz\u00e1s: fnexo\nSikeresen l\u00e9trehozva a funkci\u00f3: hellonode a nfrankel\/hellonode:0.0.3-al\nSikeresen l\u00e9trehozva a trigger: hellonode-trigger<\/code><\/pre>\n<p><\/p>\n<p>Amint a parancs kimenet\u00e9b\u0151l l\u00e1that\u00f3, egy \u00faj Docker kont\u00e9ner k\u00e9p k\u00e9sz\u00fcl a funkci\u00f3nk sz\u00e1m\u00e1ra. A funkci\u00f3 k\u00e9szen \u00e1ll a h\u00edv\u00e1sra, \u00e9s k\u00e9t m\u00f3don h\u00edvhatjuk meg:<\/p>\n<p><\/p>\n<ul>\n<li>haszn\u00e1lva a Fn parancsot <code>invoke<\/code><\/li>\n<li>k\u00f6zvetlen\u00fcl h\u00edvva <code>http<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>H\u00edv\u00e1s <code>invoke<\/code> A Fn egyszer\u0171en emul\u00e1lja a HTTP m\u0171k\u00f6d\u00e9st a tesztel\u00e9shez, ami k\u00e9nyelmes a gyors ellen\u0151rz\u00e9shez:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn invoke fnexo hellonode      # h\u00edvja a hellonode funkci\u00f3t az fnexo alkalmaz\u00e1sb\u00f3l\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>Ahhoz, hogy k\u00f6zvetlen\u00fcl megh\u00edvjuk a funkci\u00f3t, ismern\u00fcnk kell a teljes URL-t:<\/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>A Fn szerver a funkci\u00f3it a 8080-as porton k\u00edn\u00e1lja, \u00e9s l\u00e1tsz\u00f3lag a funkci\u00f3 URL-je az al\u00e1bbi s\u00e9ma szerint van megadva: <code>t\/app\/function<\/code>, de nem teljesen. HTTP-n kereszt\u00fcl a funkci\u00f3t nem k\u00f6zvetlen\u00fcl h\u00edvj\u00e1k meg, hanem egy \u00fagynevezett trigger seg\u00edts\u00e9g\u00e9vel, amely a neve szerint \"elind\u00edtja\" a funkci\u00f3 h\u00edv\u00e1s\u00e1t. A triggereket a k\u00f6vetkez\u0151k\u00e9ppen hat\u00e1rozz\u00e1k meg <code>`func.yml<\/code> a projektre:<\/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    # a trigger URL-je<\/code><\/pre>\n<p><\/p>\n<p>Megv\u00e1ltoztathatjuk a trigger nev\u00e9t, hogy megfeleljen a funkci\u00f3 nev\u00e9nek, ezzel egyszer\u0171s\u00edtj\u00fck a dolgokat:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">triggers:\n- name: hellonode-trigger\n  type: http\n  source: \/hellonode    # megegyezik a funkci\u00f3 nev\u00e9vel<\/code><\/pre>\n<p><\/p>\n<p>Ezut\u00e1n ism\u00e9t elind\u00edtjuk a funkci\u00f3sz\u00e1ll\u00edt\u00e1st, \u00e9s megh\u00edvjuk a funkci\u00f3t az \u00faj triggerb\u0151l:<\/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\":\"Hell\u00f3 Vil\u00e1g\"}<\/code><\/pre>\n<p><\/p>\n<p>Minden m\u0171k\u00f6dik! Itt az ideje, hogy elkezdj\u00fcnk a val\u00f3s k\u00eds\u00e9rletez\u00e9ssel \u00e9s k\u00f6zz\u00e9tegy\u00fck a FaaS-t a szerveren!<\/p>\n<p><\/p>\n<h2 id=\"ustanovka-servisov-besservernyh-funkciy-na-sobstvennoy-infrastrukture\">A szerver n\u00e9lk\u00fcli funkci\u00f3k be\u00e1ll\u00edt\u00e1sa a saj\u00e1t infrastrukt\u00far\u00e1nkon<\/h2>\n<p><\/p>\n<p>Gyorsan telep\u00edts\u00fck a virtu\u00e1lis g\u00e9pet az Exoscale CLI haszn\u00e1lat\u00e1val. Ha m\u00e9g nem \u00e1ll\u00edtottad be, haszn\u00e1lhatod <noindex><a rel=\"nofollow\" href=\"https:\/\/community.exoscale.com\/documentation\/tools\/exoscale-command-line-interface\/\">a gyors ind\u00edt\u00e1sra vonatkoz\u00f3 \u00fatmutat\u00f3nkat<\/a><\/noindex>. Ez egy nagyszer\u0171 eszk\u00f6z, amely m\u00e9g tov\u00e1bb n\u00f6veli a termel\u00e9kenys\u00e9gedet. <strong>Ne felejtsd el, hogy be kell \u00e1ll\u00edtani a szab\u00e1lyt a 8080-as port megnyit\u00e1s\u00e1hoz a Biztons\u00e1gi Csoportban!<\/strong> A k\u00f6vetkez\u0151 parancsok elind\u00edtanak egy tiszta virtu\u00e1lis g\u00e9pet, amely k\u00e9szen \u00e1ll a funkci\u00f3ink elhelyez\u00e9s\u00e9re:<\/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>Ezut\u00e1n ssh-n kereszt\u00fcl bel\u00e9phet\u00fcnk a virtu\u00e1lis g\u00e9pre, \u00e9s telep\u00edthetj\u00fck a t\u00e1voli Fn szervert:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ exo ssh fn-server\n\nA gazdag\u00e9p '185.19.30.175 (185.19.30.175)' hiteless\u00e9ge nem \u00e1llap\u00edthat\u00f3 meg.\nAz ECDSA kulcsujjlenyomat: SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.\nBiztos benne, hogy folytatja a csatlakoz\u00e1st (igen\/nem)? igen\nFigyelmeztet\u00e9s: '185.19.30.175' (ECDSA) v\u00e9glegesen hozz\u00e1adva a megismert gazdag\u00e9pek list\u00e1j\u00e1hoz.\n\u00dcdv\u00f6z\u00f6lj\u00fck az Ubuntu 18.04 LTS-en (GNU\/Linux 4.15.0-20-generic x86_64)<\/code><\/pre>\n<p><\/p>\n<p>Ezut\u00e1n telep\u00edtj\u00fck a Dockert \u00e9s a Fn szervert is, ahogyan azt m\u00e1r a helyi g\u00e9pen is tett\u00fck, elind\u00edtjuk a szervert:<\/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>A Fn k\u00e9szen \u00e1ll a funkci\u00f3k fogad\u00e1s\u00e1ra! A t\u00e1voli szerverre val\u00f3 funkci\u00f3k c\u00e9lzott \u00e1tvitel\u00e9hez a parancsot fogjuk haszn\u00e1lni <code>after_deploy<\/code> a helyi sz\u00e1m\u00edt\u00f3g\u00e9pr\u0151l, elhagyva a z\u00e1szl\u00f3t <code>--local<\/code>.<\/p>\n<p><\/p>\n<p>Ezen k\u00edv\u00fcl a Fn megk\u00f6veteli a Fn szerver \u00e9s a Docker regisztr\u00e1ci\u00f3 hely\u00e9nek megad\u00e1s\u00e1t. Ezeket a be\u00e1ll\u00edt\u00e1sokat k\u00f6rnyezeti v\u00e1ltoz\u00f3kon kereszt\u00fcl \u00e1ll\u00edthatjuk be <code>FN_API_URL<\/code> \u00e9s <code>FN_REGISTRY<\/code> illetve, de van egy k\u00e9nyelmesebb m\u00f3dja is a konfigur\u00e1ci\u00f3k egyszer\u0171 kezel\u00e9se \u00e9rdek\u00e9ben a telep\u00edt\u00e9sekhez.<\/p>\n<p><\/p>\n<p>A Fn kifejez\u00e9seivel a telep\u00edt\u00e9si konfigur\u00e1ci\u00f3t <code>context<\/code>az al\u00e1bbiak\u00e9nt h\u00edvj\u00e1k.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">A k\u00f6vetkez\u0151 parancs l\u00e9trehozza a kontextust:<\/code><\/pre>\n<p><\/p>\n<p>$ fn create context exoscale --provider default --api-url http:\/\/185.19.30.175:8080 --registry nfrankel<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">Az el\u00e9rhet\u0151 kontextusokat \u00edgy tekintheted meg:\n<\/code><\/pre>\n<p><\/p>\n<p>$ 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<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"> \u00c9s a frissen l\u00e9trehozott kontextusra a k\u00f6vetkez\u0151k\u00e9ppen v\u00e1lthatsz:\n\n$ fn use context exoscale\n\n Most haszn\u00e1lva a: exoscale kontextust<\/code><\/pre>\n<p><\/p>\n<p>Ezt a pontot kezdve az Fn funkci\u00f3k sz\u00e1ll\u00edt\u00e1sa Docker k\u00e9pek bet\u00f6lt\u00e9s\u00e9t fogja v\u00e9gezni, a kiv\u00e1lasztott DockerHub fi\u00f3kot haszn\u00e1lva (az \u00e9n esetemben \u2014 <code>nfrankel<\/code>), majd \u00e9rtes\u00edti a t\u00e1voli szervert (ebben a p\u00e9ld\u00e1ban \u2014 <code>http:\/\/185.19.30.175:8080<\/code>) a legfrissebb k\u00e9p hely\u00e9r\u0151l \u00e9s verzi\u00f3j\u00e1r\u00f3l, amely tartalmazza a funkci\u00f3j\u00e1t.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn deploy --app fnexo .   # helyben v\u00e9grehajtva a hellonode k\u00f6nyvt\u00e1rb\u00f3l\n\nFunkci\u00f3 telep\u00edt\u00e9se a k\u00f6vetkez\u0151re: \\\/.\nA hellonode telep\u00edt\u00e9se az app-ra: fnexo\nFriss\u00edtve a 0.0.5 verzi\u00f3ra\nK\u00e9p \u00e9p\u00edt\u00e9se nfrankel\\\/hellonode:0.0.5 .<\/code><\/pre>\n<p><\/p>\n<p>V\u00e9g\u00fcl:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl http:\\\/\\\/185.19.30.175:8080\\\/t\\\/fnexo\\\/hellonode\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Saj\u00e1t serverless megold\u00e1st \u00e9p\u00edt\u00fcnk az Fn alapj\u00e1ul\" src=\"\/wp-content\/uploads\/2019\/11\/51a7b88cd6bf4953740cfac937b0acc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>A funkci\u00f3 \u00e9letciklusa az Fn alap\u00fa szerver n\u00e9lk\u00fcli sz\u00e1m\u00edt\u00e1sokban<\/em><\/p>\n<p><\/p>\n<h2 id=\"preimuschestva-besservernyh-vychisleniy-na-svoih-moschnostyah\">A szerver n\u00e9lk\u00fcli sz\u00e1m\u00edt\u00e1sok el\u0151nyei saj\u00e1t infrastrukt\u00far\u00e1kon<\/h2>\n<p><\/p>\n<p>A szerver n\u00e9lk\u00fcli sz\u00e1m\u00edt\u00e1s egy k\u00e9nyelmes megold\u00e1s az alkalmaz\u00e1s f\u00fcggetlen r\u00e9szeinek gyors bevezet\u00e9s\u00e9re, amelyek komplexebb alkalmaz\u00e1sokkal vagy mikroszolg\u00e1ltat\u00e1sokkal m\u0171k\u00f6dnek egy\u00fctt.<\/p>\n<p><\/p>\n<p>Gyakran ez a kiv\u00e1lasztott szolg\u00e1ltat\u00f3hoz val\u00f3 k\u00f6t\u0151d\u00e9s rejtett k\u00f6lts\u00e9geivel kapcsolatos, ami a konkr\u00e9t haszn\u00e1lati eset \u00e9s mennyis\u00e9g szerint magasabb k\u00f6lts\u00e9geket \u00e9s a j\u00f6v\u0151beli rugalmass\u00e1g cs\u00f6kken\u00e9s\u00e9t okozhatja.<\/p>\n<p><\/p>\n<p>A t\u00f6bb felh\u0151s \u00e9s hibrid felh\u0151architekt\u00far\u00e1k is szenvednek ebben az esetben, mivel k\u00f6nnyen el\u0151fordulhat, hogy szeretn\u00e9nk haszn\u00e1lni a szerver n\u00e9lk\u00fcli sz\u00e1m\u00edt\u00e1st, de a v\u00e1llalati politika miatt ez lehetetlen.<\/p>\n<p><\/p>\n<p>Az Fn el\u00e9g egyszer\u0171en haszn\u00e1lhat\u00f3, szinte ugyanolyan FaaS fel\u00fcletet k\u00edn\u00e1l, minim\u00e1lis k\u00f6lts\u00e9gekkel. Megszabad\u00edt a szolg\u00e1ltat\u00f3i k\u00f6t\u0151d\u00e9sekt\u0151l, telep\u00edthet\u0151 helyben vagy b\u00e1rmely \u00e1ltalad v\u00e1lasztott felh\u0151szolg\u00e1ltat\u00f3n\u00e1l. A programoz\u00e1si nyelv v\u00e1laszt\u00e1s\u00e1ban is szabads\u00e1god van.<\/p>\n<p><\/p>\n<p>A cikk csak az Fn alapjait mutatja be, de saj\u00e1t futtat\u00e1si k\u00f6rnyezet l\u00e9trehoz\u00e1sa el\u00e9g egyszer\u0171, \u00e9s az \u00e1ltal\u00e1nos architekt\u00far\u00e1t sz\u00e9lesebben is ki lehet terjeszteni Fn terhel\u00e9seloszt\u00f3 haszn\u00e1lat\u00e1val, vagy az Fn proxy m\u00f6g\u00e9 t\u00f6rt\u00e9n\u0151 elhelyez\u00e9s\u00e9vel a v\u00e9delem \u00e9rdek\u00e9ben.<\/p>\n<p>Forr\u00e1s: <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.3 - 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\/hu\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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\u00e9sz\u00edts saj\u00e1t serverless megold\u00e1st Fn alapokon | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/52562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=52562"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/52562\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=52562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=52562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=52562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}