{"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\/de\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","title":{"rendered":"Wir entwickeln unser eigenes serverless auf Grundlage von Fn.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Wir entwickeln unser eigenes serverless auf Grundlage von 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 einer der auff\u00e4lligsten Trends im Cloud Computing. Das grundlegende Prinzip ist, dass die Infrastruktur nicht die Sorge der DevOps, sondern des Dienstanbieters ist. Die Skalierung der Ressourcen passt sich automatisch an die Last an und bietet eine hohe \u00c4nderungsrate.<\/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>Historisch war Amazon der erste Cloud-Dienstleister, der FaaS mit AWS Lambda anbot, weshalb der Begriff seinen Ursprung dort hat. Auch andere Cloud-Dienstleister bieten \u00e4hnliche L\u00f6sungen an:<\/p>\n<p><\/p>\n<ul>\n<li>Cloud Functions von Google<\/li>\n<li>Azure Functions von Microsoft<\/li>\n<\/ul>\n<p><\/p>\n<p>All diese Unternehmen bieten Serverless Computing, automatische Skalierung und die Abrechnung nur f\u00fcr tats\u00e4chlich genutzte Ressourcen an, binden die Kunden jedoch an ihr propriet\u00e4res Produkt. Dennoch gibt es kostenlose Open-Source-Alternativen f\u00fcr die Implementierung von Serverless Computing. Es ist erw\u00e4hnenswert:<\/p>\n<p><\/p>\n<ul>\n<li>Die Plattform <noindex><a rel=\"nofollow\" href=\"https:\/\/openwhisk.apache.org\/\">Apache OpenWhisk<\/a><\/noindex>, entwickelt im Inkubator von IBM,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.spring.io\/spring-cloud-function\/\">Spring Cloud Functions<\/a><\/noindex>, als Teil eines umfangreichen \u00d6kosystems des Spring Frameworks, das auch als Fassade f\u00fcr AWS Lambda, Azure Functions und OpenWhisk verwendet werden kann,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fnproject\">Das Fn-Projekt<\/a><\/noindex>, unterst\u00fctzt von Oracle.<\/li>\n<\/ul>\n<p><\/p>\n<p>Alle sind vollst\u00e4ndig cloudunabh\u00e4ngig, das hei\u00dft, sie k\u00f6nnen in jede Cloud installiert werden, einschlie\u00dflich Ihrer eigenen, \u00f6ffentlicher oder privater sowie nat\u00fcrlich in Exoscale.<\/p>\n<p><\/p>\n<h2 id=\"kak-proekt-fn-ustroen\">Wie das Fn-Projekt funktioniert<\/h2>\n<p><\/p>\n<p>Fn basiert vollst\u00e4ndig auf Docker und besteht aus zwei Hauptkomponenten:<\/p>\n<p><\/p>\n<ul>\n<li>CLI-Programme, die dazu dienen, alle Aspekte der Fn-Infrastruktur zu verwalten und mit dem Fn-Server zu interagieren,<\/li>\n<li>Der eigentliche Fn-Server, eine gew\u00f6hnliche Anwendung, die in einem Docker-Container verpackt ist.<\/li>\n<\/ul>\n<p><\/p>\n<p>Funktionen, die in Fn bereitgestellt werden, laufen ebenfalls in eigenen Containern, was die Unterst\u00fctzung vieler Programmiersprachen erm\u00f6glicht, zum Beispiel... Clojure!<\/p>\n<p><\/p>\n<p>Die Argumente der Funktionen werden \u00fcber die Standardeingabe (STDIN) \u00fcbergeben, die Ergebnisse werden auf die Standardausgabe (STDOUT) geschrieben. Wenn die Argumente oder R\u00fcckgabewerte keine einfachen Werte sind (z. B. JSON-Objekte) \u2013 k\u00f6nnen sie mithilfe der Abstraktionsschicht umgewandelt werden, die von Fn in Form eines Function Development Kits (FDK) bereitgestellt wird.<\/p>\n<p><\/p>\n<p>Zur Vereinfachung stehen integrierte Vorlagensets zur Verf\u00fcgung, die das Deployen von FaaS in einer Vielzahl von Programmiersprachen und deren Versionen (Go, verschiedene Java-Versionen, Python usw.) erleichtern.<\/p>\n<p><\/p>\n<p>Die Erstellung von FaaS ist einfach und folgt diesem Schema:<\/p>\n<p><\/p>\n<ul>\n<li>Wir deployen die Funktion \u00fcber die Fn-CLI: Eine Anwendungs-Konfigurationsdatei f\u00fcr Fn basierend auf der gew\u00e4hlten Vorlage wird erstellt.<\/li>\n<li>Wir rollen unsere eigene Funktion ebenfalls \u00fcber die Fn-CLI aus: Das Container-Image wird in ein Repository hochgeladen, und der Server wird \u00fcber die Existenz und den Standort dieses Images informiert.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Wir entwickeln unser eigenes serverless auf Grundlage von Fn.\" src=\"\/wp-content\/uploads\/2019\/11\/5add8b58c80e976cd61a156fdd0fba11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Das Prinzip der Bereitstellung von Funktionen in Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"lokalnaya-ustanovka-i-testirovanie-besservernyh-funkciy\">Lokale Installation und Testen von serverlosen Funktionen<\/h2>\n<p><\/p>\n<p>Lassen Sie uns mit der Installation von Fn auf der lokalen Maschine beginnen. Zun\u00e4chst wird Docker installiert, wie von Fn gefordert. Wir gehen davon aus, dass wir Debian\/Ubuntu verwenden:<\/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>Oder verwenden Sie den Paketmanager\/Bau von Docker entsprechend Ihrem System. Danach k\u00f6nnen wir direkt zur Installation der Fn-CLI \u00fcbergehen. Zum Beispiel mit 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>Wenn Sie auf OSX mit installiertem Homebrew arbeiten, k\u00f6nnen Sie einen anderen Weg w\u00e4hlen:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ brew install fn\n\n==&gt; Herunterladen https:\/\/homebrew.bintray.com\/bottles\/fn-0.5.8.high_sierra.bottle.tar.gz\n==&gt; Herunterladen von https:\/\/akamai.bintray.com\/b1\/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb\n######################################################################## 100.0%\n==&gt; Entpacken fn-0.5.8.high_sierra.bottle.tar.gz\n  \/usr\/local\/Cellar\/fn\/0.5.8: 5 Dateien, 16.7MB<\/code><\/pre>\n<p><\/p>\n<p>Jetzt ist alles bereit f\u00fcr das erste Deployment unserer Funktion \u00fcber die CLI. Zur Vereinfachung verwenden wir die integrierte Laufzeitumgebung, zum Beispiel Node:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn init --runtime node --trigger http hellonode\n\nFunktion wird erstellt unter: \/hellonode\nFunktionsvordruck erstellt.\nfunc.yaml erstellt.<\/code><\/pre>\n<p><\/p>\n<p>Ein neues Verzeichnis wird erstellt <code>hellonode<\/code> f\u00fcr die weitere Entwicklung unserer Fn-Funktion mit einigen grundlegenden Konfigurationsdateien. Im neu erstellten Verzeichnis k\u00f6nnen Sie Ihre Anwendung erstellen, die den Standards der von Ihnen gew\u00e4hlten Sprache oder Laufzeit entspricht:<\/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 erstellt die Grundstruktur des Projekts, erstellt die Datei <code>func.yaml<\/code>, die notwendige Konfigurationen f\u00fcr Fn enth\u00e4lt, und legt eine Vorlage f\u00fcr den Code in der von Ihnen gew\u00e4hlten Sprache fest.<\/p>\n<p><\/p>\n<p>Im Fall der Laufzeit Node bedeutet das:<\/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': 'Hallo ' + name}\n})<\/code><\/pre>\n<p><\/p>\n<p>Jetzt pr\u00fcfen wir schnell unsere Funktion lokal, um zu sehen, wie alles funktioniert.<\/p>\n<p><\/p>\n<p>Zu Beginn starten wir den Fn-Server. Wie bereits erw\u00e4hnt, ist der Fn-Server ein Docker-Container, der nach dem Start das Image aus dem Docker-Registry abruft.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn start -d                    # starten Sie den lokalen Server im Hintergrund\n\nImage 'fnproject\/fnserver:latest' lokal nicht gefunden\nlatest: Herunterladen von fnproject\/fnserver\nff3a5c916c92: Download vollst\u00e4ndig\n1a649ea86bca: Download vollst\u00e4ndig\nce35f4d5f86a: Download vollst\u00e4ndig\n\n...\n\nStatus: Neuere Version des Images f\u00fcr fnproject\/fnserver:latest heruntergeladen\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>den Namen der Anwendung<\/code>: In Fn m\u00fcssen alle Anwendungen als Namensr\u00e4ume f\u00fcr verwandte Funktionen definiert werden.<\/p>\n<p><\/p>\n<p>Das Fn CLI sucht nach einer Datei <code>func.yaml<\/code> im aktuellen Verzeichnis, die zur Konfiguration der Funktion verwendet werden soll. Daher sollten wir zuerst in unser Verzeichnis wechseln. <code>hellonode<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cd hellonode\n$ fn deploy --app fnexo --local  # Wir rollen die Funktion lokal aus, der Name der Anwendung ist fnexo.\n                                 # Der Parameter local l\u00e4dt das Image nicht in das entfernte Registry,\n                                 # sondern f\u00fchrt es direkt aus\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>Wie aus der Ausgabe des Befehls zu sehen ist, wird ein neues Container-Image f\u00fcr Docker erstellt, das unsere Funktion enth\u00e4lt. Die Funktion ist bereit, aufgerufen zu werden, und wir haben zwei M\u00f6glichkeiten, dies zu tun:<\/p>\n<p><\/p>\n<ul>\n<li>unter Verwendung des Befehls Fn <code>invoke<\/code><\/li>\n<li>direkt \u00fcber <code>http<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Aufruf <code>invoke<\/code> \u00fcber Fn wird der HTTP-Betrieb nur f\u00fcr Tests emuliert, was n\u00fctzlich f\u00fcr eine schnelle \u00dcberpr\u00fcfung ist:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn invoke fnexo hellonode      # Wir rufen die Funktion hellonode der Anwendung fnexo auf\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>Um die Funktion direkt aufzurufen, muss die vollst\u00e4ndige URL bekannt sein:<\/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>Der Fn-Server stellt seine Funktionen \u00fcber den Port 8080 bereit, und offenbar entspricht die URL der Funktion dem Schema <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> Projekt:<\/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 des Triggers<\/code><\/pre>\n<p><\/p>\n<p>Wir k\u00f6nnen den Namen des Triggers \u00e4ndern, damit er dem Namen der Funktion entspricht, das vereinfacht alles:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">triggers:\n- name: hellonode-trigger\n  type: http\n  source: \\\/hellonode    # entspricht dem Namen der Funktion<\/code><\/pre>\n<p><\/p>\n<p>Dann starten wir die Bereitstellung der Funktion erneut und rufen sie \u00fcber den neuen Trigger auf:<\/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 funktioniert! Es ist an der Zeit, zu realen Experimenten \u00fcberzugehen und unseren FaaS auf dem Server zu ver\u00f6ffentlichen!<\/p>\n<p><\/p>\n<h2 id=\"ustanovka-servisov-besservernyh-funkciy-na-sobstvennoy-infrastrukture\">Installation von Serverless-Funktionen auf eigener Infrastruktur<\/h2>\n<p><\/p>\n<p>Lassen Sie uns schnell eine virtuelle Maschine mit der Exoscale CLI einrichten. Wenn Sie sie noch nicht konfiguriert haben, k\u00f6nnen Sie <noindex><a rel=\"nofollow\" href=\"https:\/\/community.exoscale.com\/documentation\/tools\/exoscale-command-line-interface\/\">unserem schnellen Startleitfaden folgen<\/a><\/noindex>. Es ist ein gro\u00dfartiges Werkzeug, das Ihre Produktivit\u00e4t weiter steigern wird. <strong>Vergessen Sie nicht, eine Regel zum \u00d6ffnen des Ports 8080 in der Sicherheitsgruppe einzurichten!<\/strong> Die folgenden Befehle starten eine saubere virtuelle Maschine, die bereit ist, unsere Funktionen zu 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>Dann kann man sich per SSH mit der virtuellen Maschine verbinden und den Fn-Server installieren:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ exo ssh fn-server\n\nDie Authentizit\u00e4t des Hosts '185.19.30.175 (185.19.30.175)' kann nicht best\u00e4tigt werden.\nDer ECDSA-Schl\u00fcsselfingerabdruck ist SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.\nSind Sie sich sicher, dass Sie die Verbindung fortsetzen m\u00f6chten (ja\/nein)? ja\nWarnung: '185.19.30.175' (ECDSA) wurde dauerhaft zur Liste der bekannten Hosts hinzugef\u00fcgt.\nWillkommen bei Ubuntu 18.04 LTS (GNU\/Linux 4.15.0-20-generic x86_64)<\/code><\/pre>\n<p><\/p>\n<p>Anschlie\u00dfend installieren wir Docker und den Fn-Server ganz genauso, wie es bereits auf der lokalen Maschine gemacht wurde, und starten den 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 ist bereit, Funktionen entgegenzunehmen! Um Funktionen auf den Remote-Server zu \u00fcbertragen, verwenden wir den Befehl <code>deploy<\/code> vom lokalen Computer aus und lassen das Flag <code>--local<\/code>.<\/p>\n<p><\/p>\n<p>Dar\u00fcber hinaus erfordert Fn die Angabe des Plazierung von Fn-Server und Docker-Registry. Diese Parameter k\u00f6nnen \u00fcber Umgebungsvariablen festgelegt werden: <code>FN_API_URL<\/code> und <code>FN_REGISTRY<\/code> Entsprechend wird jedoch eine benutzerfreundlichere Methode angeboten, um die Erstellung und Verwaltung von Konfigurationen f\u00fcr die Bereitstellung zu erleichtern.<\/p>\n<p><\/p>\n<p>In Bezug auf Fn wird eine Konfiguration f\u00fcr die Bereitstellung genannt <code>context<\/code>. Der folgende Befehl erstellt einen Kontext:<\/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>Sie k\u00f6nnen die verf\u00fcgbaren Kontexte folgenderma\u00dfen anzeigen:<\/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>Und um zu dem gerade erstellten Kontext zu wechseln, so:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"> $ fn use context exoscale\n\n Now using context: exoscale<\/code><\/pre>\n<p><\/p>\n<p>Ab diesem Punkt wird die Bereitstellung von Fn-Funktionen Docker-Images laden, wobei das ausgew\u00e4hlte DockerHub-Konto verwendet wird (in meinem Fall \u2014 <code>nfrankel<\/code>), woraufhin der Remote-Server (in diesem Beispiel \u2014 <code>http:\/\/185.19.30.175:8080<\/code>) \u00fcber den Standort und die Version des letzten Images, das Ihre Funktion enth\u00e4lt, informiert wird.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn deploy --app fnexo .   # wird auf dem lokalen Rechner aus dem Verzeichnis hellonode ausgef\u00fchrt\n\nDeploying function at: \/.\nDeploying hellonode to app: fnexo\nBumped to version 0.0.5\nBuilding image nfrankel\/hellonode:0.0.5 .<\/code><\/pre>\n<p><\/p>\n<p>Schlie\u00dflich:<\/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=\"Wir entwickeln unser eigenes serverless auf Grundlage von Fn.\" src=\"\/wp-content\/uploads\/2019\/11\/51a7b88cd6bf4953740cfac937b0acc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Der Lebenszyklus einer Funktion in serverlosen Berechnungen basierend auf Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"preimuschestva-besservernyh-vychisleniy-na-svoih-moschnostyah\">Die Vorteile von serverlosen Berechnungen auf eigener Hardware<\/h2>\n<p><\/p>\n<p>Serverlose Berechnungen sind eine praktische L\u00f6sung f\u00fcr die schnelle Implementierung unabh\u00e4ngiger Teile einer Anwendung, die mit komplexeren Anwendungen oder Mikrodiensten interagieren.<\/p>\n<p><\/p>\n<p>Dies ist oft mit versteckten Kosten verbunden, die an den gew\u00e4hlten Anbieter gebunden sind, was je nach spezifischem Anwendungsfall und Umfang zu h\u00f6heren Kosten und geringerer Flexibilit\u00e4t in der Zukunft f\u00fchren kann.<\/p>\n<p><\/p>\n<p>Multicloud- und hybride Cloud-Architekturen leiden ebenfalls darunter, da man schnell in eine Situation gelangen kann, in der man serverlose Berechnungen nutzen m\u00f6chte, dies aber aufgrund der Unternehmensrichtlinien m\u00f6glicherweise nicht m\u00f6glich ist.<\/p>\n<p><\/p>\n<p>Fn ist einfach zu bedienen, kann fast die gleiche FaaS-Schnittstelle bieten, jedoch mit geringen Kosten. Es befreit von jeglichen Anbieterbindungen, da man es lokal oder bei einem beliebigen durch den Nutzer bevorzugten Cloud-Anbieter installieren kann. Zudem gibt es Freiheit bei der Wahl der Programmiersprache.<\/p>\n<p><\/p>\n<p>Der Artikel behandelt nur die Grundlagen von Fn, doch die Erstellung einer eigenen Ausf\u00fchrungsumgebung ist recht einfach. Die gesamte Architektur kann erweitert werden, indem man den Fn-Load-Balancer verwendet oder Fn hinter einem Proxy platziert, um ihn zu sch\u00fctzen.<\/p>\n<p>Quelle: <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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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 &quot;\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430&quot;\" \/>\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\/de\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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:description\" content=\"\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 &quot;\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430&quot;\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/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\udd47Bauen Sie Ihre eigene Serverless-L\u00f6sung auf Basis von Fn | ProHoster","description":"Serverless Computing ist einer der auff\u00e4lligsten Trends im Cloud-Computing. Das Grundprinzip besteht darin, dass die Infrastruktur nicht die Sorge der DevOps, sondern des Dienstanbieters ist. Die Skalierung der Ressourcen erfolgt automatisch entsprechend der Last und hat eine hohe \u00c4nderungsrate. Ein weiteres gemeinsames Merkmal ist der Trend zur Minimierung und Fokussierung des Codes, weshalb serverlose Berechnungen manchmal als \"Function as a Service\" bezeichnet werden.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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:description":"\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 &quot;\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430&quot;","og:url":"https:\/\/prohoster.info\/de\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/52562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=52562"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/52562\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=52562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=52562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=52562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}