{"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\/nl\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","title":{"rendered":"We bouwen onze eigen serverless op basis van Fn","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"We bouwen onze eigen serverless op basis van 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\">Serverless computing<\/a><\/noindex> \u2014 is een van de meest opvallende trends in cloud computing. Het belangrijkste principe is dat de infrastructuur de verantwoordelijkheid is van de dienstverleners, en niet van de DevOps-teams. De schaalvergroting van middelen past zich automatisch aan de belasting aan en heeft een hoge respons snelheid.<\/p>\n<p><\/p>\n<p>Een andere gemeenschappelijke eigenschap is de tendens om de code te minimaliseren en te focussen, waardoor serverloze computing soms \"functie als dienst\" (FaaS) wordt genoemd.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Historisch gezien was Amazon de eerste cloudprovider die FaaS aanbood met AWS Lambda, waar deze naam vandaan komt. Andere cloudproviders bieden ook vergelijkbare diensten aan:<\/p>\n<p><\/p>\n<ul>\n<li>Cloud Functions van Google<\/li>\n<li>Azure Functions van Microsoft<\/li>\n<\/ul>\n<p><\/p>\n<p>Al deze bedrijven bieden serverless computing, automatische schaalvergroting en alleen betaling voor daadwerkelijk gebruikte middelen, maar ze binden klanten aan hun eigen product. Er zijn echter ook gratis alternatieven met open source voor het organiseren van serverless computing. Het is belangrijk op te merken:<\/p>\n<p><\/p>\n<ul>\n<li>Het platform <noindex><a rel=\"nofollow\" href=\"https:\/\/openwhisk.apache.org\/\">Apache OpenWhisk<\/a><\/noindex>, ontwikkeld onder toezicht van IBM in een incubator,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.spring.io\/spring-cloud-function\/\">Spring Cloud Functions<\/a><\/noindex>, als onderdeel van het vrij omvangrijke ecosysteem van Spring Framework, dat ook kan worden gebruikt als facade voor AWS Lambda, Azure Functions en OpenWhisk,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fnproject\">Project Fn<\/a><\/noindex>, ondersteund door Oracle.<\/li>\n<\/ul>\n<p><\/p>\n<p>Al deze oplossingen zijn volledig onafhankelijk van clouds, wat betekent dat ze in elke cloud kunnen worden ge\u00efnstalleerd, inclusief je eigen cloud, publiek of priv\u00e9, en natuurlijk in Exoscale.<\/p>\n<p><\/p>\n<h2 id=\"kak-proekt-fn-ustroen\">Hoe het Fn-project is opgebouwd<\/h2>\n<p><\/p>\n<p>Fn is volledig gebaseerd op Docker en bestaat uit twee hoofdcomponenten:<\/p>\n<p><\/p>\n<ul>\n<li>Een CLI-programma dat bedoeld is voor het beheer van alle aspecten van de Fn-infrastructuur en interactie met de Fn-server,<\/li>\n<li>De Fn-server zelf, een gewone applicatie verpakt in een Docker-container.<\/li>\n<\/ul>\n<p><\/p>\n<p>Functies die in Fn worden uitgerold, draaien ook in aparte containers, wat ondersteuning biedt voor verschillende programmeertalen, bijvoorbeeld\u2026 Clojure!<\/p>\n<p><\/p>\n<p>Functies worden via standaardinvoer (STDIN) doorgegeven, terwijl de resultaten op standaarduitvoer (STDOUT) worden geschreven. Als de argumenten of teruggegeven waarden geen eenvoudige waarden zijn (bijvoorbeeld een JSON-object), kunnen ze worden omgezet met behulp van de abstractielaag die Fn zelf biedt in de vorm van een function development kit (FDK).<\/p>\n<p><\/p>\n<p>Voor gemak zijn er ingebouwde sjablonen beschikbaar die het implementeren van FaaS in een uitgebreide lijst van verschillende talen en versies (Go, verschillende versies van Java, Python, enz.) vergemakkelijken.<\/p>\n<p><\/p>\n<p>Het cre\u00ebren van FaaS is eenvoudig door het volgende schema te volgen:<\/p>\n<p><\/p>\n<ul>\n<li>We implementeren de functie met behulp van de CLI Fn: er wordt een applicatieconfiguratiebestand voor Fn aangemaakt, gebaseerd op de gekozen sjabloon.<\/li>\n<li>We rolt onze eigen functie uit, wederom met behulp van de CLI Fn: de container afbeelding wordt in een bepaalde repository geplaatst, waarna de server op de hoogte wordt gebracht van het bestaan en de locatie van deze afbeelding.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"We bouwen onze eigen serverless op basis van Fn\" src=\"\/wp-content\/uploads\/2019\/11\/5add8b58c80e976cd61a156fdd0fba11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Het principe van functielevering in Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"lokalnaya-ustanovka-i-testirovanie-besservernyh-funkciy\">Lokale installatie en testen van serverless functies<\/h2>\n<p><\/p>\n<p>Laten we beginnen met de installatie van Fn op de lokale machine. Eerst installeren we Docker, zoals vereist door Fn. Er wordt aangenomen dat we op Debian\/Ubuntu zijn:<\/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>Of gebruik een pakketbeheerder\/monitor om Docker volgens jouw systeem te installeren. Vervolgens kan je direct overgaan tot de installatie van Fn CLI. Bijvoorbeeld, met curl:<\/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>Als je op OSX werkt met Homebrew ge\u00efnstalleerd, kun je een andere weg inslaan:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ brew install fn\n\n==&gt; Downloaden https:\/\/homebrew.bintray.com\/bottles\/fn-0.5.8.high_sierra.bottle.tar.gz\n==&gt; Downloaden van https:\/\/akamai.bintray.com\/b1\/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb\n######################################################################## 100.0%\n==&gt; Gieten van fn-0.5.8.high_sierra.bottle.tar.gz\n  \/usr\/local\/Cellar\/fn\/0.5.8: 5 bestanden, 16.7MB<\/code><\/pre>\n<p><\/p>\n<p>Nu is alles klaar voor de eerste implementatie van onze functie met behulp van CLI. Voor de eenvoud gebruiken we de ingebouwde omgeving om uit te voeren, bijvoorbeeld Node:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn init --runtime node --trigger http hellonode\n\nFunctie aangemaakt op: \/hellonode\nFunctie sjabloon gegenereerd.\nfunc.yaml aangemaakt.<\/code><\/pre>\n<p><\/p>\n<p>Er wordt een nieuwe map aangemaakt <code>hellonode<\/code> voor verdere ontwikkeling van onze Fn-functie met enkele basisconfiguratiebestanden. Binnen de nieuw aangemaakte map kun je je applicatie cre\u00ebren, volgend de normen van de door jou gekozen taal of runtime:<\/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 cre\u00ebert de initi\u00eble projectstructuur en maakt het bestand aan <code>func.yaml<\/code>, die de noodzakelijke instellingen voor Fn bevat, en het sjabloon voor de code in de door jou gekozen taal instelt.<\/p>\n<p><\/p>\n<p>In het geval van de Node runtime betekent dit:<\/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 = 'Wereld';\n  if (input.name) {\n    name = input.name;\n  }\n  return {'message': 'Hallo ' + name}\n})<\/code><\/pre>\n<p><\/p>\n<p>Laten we nu snel onze functie lokaal testen om te zien hoe alles werkt.<\/p>\n<p><\/p>\n<p>Eerst starten we de Fn-server. Zoals eerder vermeld, is de Fn-server een Docker-container, dus na het starten haalt deze het beeld uit de Docker-registry.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn start -d                    # start de lokale server op de achtergrond\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>Om onze functie uit te voeren, moet deze \"uitgevoerd\" worden. Hiervoor is vereist <code>de naam van de applicatie<\/code>: in Fn moeten alle applicaties worden gedefinieerd als namespaces voor de bijbehorende functies.<\/p>\n<p><\/p>\n<p>Fn CLI zal zoeken naar het bestand <code>func.yaml<\/code> in de huidige map, dat zal worden toegepast voor de functie-instelling. Dus laten we eerst naar onze map navigeren <code>hellonode<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cd hellonode\n$ fn deploy --app fnexo --local  # rol de functie lokaal uit, de naam van de applicatie is - fnexo.\n                                 # de local parameter uploadt het beeld niet naar de externe registry,\n                                 # maar start het direct\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>Zoals uit de uitvoer van de opdracht blijkt, wordt er een nieuw Docker-containerbeeld aangemaakt dat onze functie bevat. De functie is klaar voor aanroep, en we hebben twee manieren om dit te doen:<\/p>\n<p><\/p>\n<ul>\n<li>door de Fn <code>invoke<\/code><\/li>\n<li>direct aan te roepen via <code>http<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Aanroep <code>invoke<\/code> via Fn simuleert eenvoudigweg het werken via HTTP voor tests, wat handig is voor een snelle controle:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn invoke fnexo hellonode      # roep de functie hellonode aan van de applicatie fnexo\n\n{\"message\":\"Hallo Wereld\"}<\/code><\/pre>\n<p><\/p>\n<p>Om de functie direct aan te roepen, moet je de volledige URL kennen:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl http:\/\/localhost:8080\/t\/fnexo\/hellonode-trigger\n\n{\"message\":\"Hallo Wereld\"}<\/code><\/pre>\n<p><\/p>\n<p>De Fn-server biedt zijn functies aan via poort 8080, en het lijkt erop dat de URL van de functie overeenkomt met het schema <code>t\/app\/function<\/code>, maar niet volledig. Via HTTP wordt de functie niet rechtstreeks aangeroepen, maar via een zogenaamde trigger, die volgens zijn naam de aanroep van de functie \"activeert\". Triggers worden gedefinieerd in <code>`func.yml<\/code> van het project:<\/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    # URL van de trigger<\/code><\/pre>\n<p><\/p>\n<p>We kunnen de naam van de trigger wijzigen, zodat deze overeenkomt met de naam van de functie, dat vereenvoudigt alles:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">triggers:\n- name: hellonode-trigger\n  type: http\n  source: \/hellonode    # komt overeen met de naam van de functie<\/code><\/pre>\n<p><\/p>\n<p>Vervolgens starten we de functie opnieuw en roepen deze aan vanuit de nieuwe trigger:<\/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\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>Alles werkt! Het is tijd om echte experimenten uit te voeren en onze FaaS op de server te publiceren!<\/p>\n<p><\/p>\n<h2 id=\"ustanovka-servisov-besservernyh-funkciy-na-sobstvennoy-infrastrukture\">Installatie van serverless functies op eigen infrastructuur<\/h2>\n<p><\/p>\n<p>Laten we snel een virtuele machine opzetten met de Exoscale CLI. Als je deze nog niet hebt ingesteld, kun je gebruikmaken van <noindex><a rel=\"nofollow\" href=\"https:\/\/community.exoscale.com\/documentation\/tools\/exoscale-command-line-interface\/\">onze gids voor snelle installatie<\/a><\/noindex>. Dit is een geweldig hulpmiddel dat je productiviteit verder verhoogt. <strong>Vergeet niet een regel in te stellen om poort 8080 te openen in de Security Group!<\/strong> De volgende opdrachten starten een schone virtuele machine, klaar om onze functies te hosten:<\/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>Vervolgens kun je via ssh de virtuele machine benaderen en de Fn-server installeren:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ exo ssh fn-server\n\nDe authenticiteit van de host '185.19.30.175 (185.19.30.175)' kan niet worden vastgesteld.\nECDSA sleutelvingerafdruk is SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.\nWeet je zeker dat je wilt doorgaan met verbinden (ja\/nee)? ja\nWaarschuwing: '185.19.30.175' (ECDSA) is permanent toegevoegd aan de lijst met bekende hosts.\nWelkom bij Ubuntu 18.04 LTS (GNU\/Linux 4.15.0-20-generic x86_64)<\/code><\/pre>\n<p><\/p>\n<p>Vervolgens installeren we Docker en de Fn-server op dezelfde manier als op de lokale machine, en starten de server:<\/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 is klaar om functies te ontvangen! Voor de doeltreffende overdracht van functies naar de externe server zullen we de command gebruiken <code>deploy<\/code> van de lokale computer, waarbij we de vlag <code>--local<\/code>.<\/p>\n<p><\/p>\n<p>Daarnaast vereist Fn dat je de locatie van de Fn-server en de Docker registry opgeeft. Deze parameters kunnen worden ingesteld via omgevingsvariabelen <code>FN_API_URL<\/code> en <code>FN_REGISTRY<\/code> respectievelijk, maar er is ook een handiger manier voor gemakkelijke creatie en beheer van configuraties voor implementatie.<\/p>\n<p><\/p>\n<p>In de termen van Fn wordt de configuratie voor implementatie aangeduid als <code>context<\/code>. De volgende opdracht zal de context aanmaken:<\/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>U kunt de beschikbare contexten als volgt bekijken:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn list contexts\n\nHUIDIGE NAAM      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>En schakelen naar de context die zojuist is aangemaakt, zo:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"> $ fn use context exoscale\n\n Nu gebruikmakend van context: exoscale<\/code><\/pre>\n<p><\/p>\n<p>Vanaf dit punt zal de levering van Fn-functies Docker-images laden met behulp van het gekozen account op DockerHub (in mijn geval \u2014 <code>nfrankel<\/code>), waarna de externe server (in dit voorbeeld \u2014 <code>http:\/\/185.19.30.175:8080<\/code>) zal worden ge\u00efnformeerd over de locatie en versie van de laatste afbeelding die uw functie bevat.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn deploy --app fnexo .   # uitgevoerd op de lokale machine vanuit de hellonode-structuur\n\nFunctioneel aan het implementeren op: \/.\nFunctie hellonode aan app: fnexo implementeren\nVerhoogd naar versie 0.0.5\nAfbeelding nfrankel\/hellonode:0.0.5 bouwen.<\/code><\/pre>\n<p><\/p>\n<p>Eindelijk:<\/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=\"We bouwen onze eigen serverless op basis van Fn\" src=\"\/wp-content\/uploads\/2019\/11\/51a7b88cd6bf4953740cfac937b0acc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Levenscyclus van een functie in serverloze computing gebaseerd op Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"preimuschestva-besservernyh-vychisleniy-na-svoih-moschnostyah\">Voordelen van serverloze computing op eigen infrastructuur<\/h2>\n<p><\/p>\n<p>Serverloze computing is een handige oplossing voor een snelle implementatie van onafhankelijke delen van een applicatie die samenwerken met meer complexe applicaties of microservices.<\/p>\n<p><\/p>\n<p>Dit gaat vaak gepaard met verborgen kosten van het vastzitten aan de gekozen leverancier, wat, afhankelijk van de specifieke use-case en schaal, kan leiden tot hogere kosten en een afname van flexibiliteit in de toekomst.<\/p>\n<p><\/p>\n<p>Multicloud- en hybride cloudarchitecturen lijden ook in zo'n geval, want je kunt gemakkelijk in een situatie belanden waarin je serverloze computing zou willen gebruiken, maar dit om bedrijfsbeleid onmogelijk kan zijn.<\/p>\n<p><\/p>\n<p>Fn is eenvoudig te gebruiken, kan een bijna identieke interface zoals FaaS bieden, met lage overhead. Het voorkomt enige binding aan de leverancier, je kunt het lokaal installeren of bij een cloudprovider naar keuze. Ook is er vrijheid in het kiezen van programmeertaal.<\/p>\n<p><\/p>\n<p>In dit artikel worden slechts de basisprincipes van Fn behandeld, maar het cre\u00ebren van je eigen runtime-omgeving is vrij eenvoudig, en de algemene architectuur kan verder worden uitgebreid met behulp van een Fn-loadbalancer of door Fn achter een proxy te plaatsen voor beveiliging.<\/p>\n<p>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47Bouw je eigen serverless op basis van Fn | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/52562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=52562"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/52562\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=52562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=52562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=52562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}