{"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\/da\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","title":{"rendered":"Vi bygger vores egen serverless baseret p\u00e5 Fn","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Vi bygger vores egen serverless baseret p\u00e5 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 en af de mest markante tendenser inden for cloud computing. Den grundl\u00e6ggende arbejdsprincip er, at infrastrukturen er et anliggende for tjenesteudbyderen, ikke DevOps. Ressourcest\u00f8rrelsen justeres automatisk til belastningen og har en h\u00f8j \u00e6ndringshastighed.<\/p>\n<p><\/p>\n<p>En anden f\u00e6lles tr\u00e6k er tendensen til at minimere og fokusere koden, derfor kaldes serverl\u00f8se beregninger nogle gange for \"funktion som en service\" (FaaS).<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Historisk set var Amazon den f\u00f8rste udbyder af cloud-tjenester, der tilb\u00f8d FaaS med AWS Lambda, hvor navnet kommer fra. Andre cloud-tjenesteudbydere tilbyder ogs\u00e5 svarende alternativer:<\/p>\n<p><\/p>\n<ul>\n<li>Cloud Functions fra Google<\/li>\n<li>Azure Functions fra Microsoft<\/li>\n<\/ul>\n<p><\/p>\n<p>Alle disse virksomheder tilbyder serverless computing, automatisk skalering og betaling kun for de faktisk anvendte ressourcer, men de binder samtidig kunderne til deres propriet\u00e6re produkter. Der findes dog gratis open source-alternativer til at organisere serverless computing. Det er v\u00e6rd at bem\u00e6rke:<\/p>\n<p><\/p>\n<ul>\n<li>Platformen <noindex><a rel=\"nofollow\" href=\"https:\/\/openwhisk.apache.org\/\">Apache OpenWhisk<\/a><\/noindex>, der udvikles i et incubatorprojekt hos IBM,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.spring.io\/spring-cloud-function\/\">Spring Cloud Functions<\/a><\/noindex>, som en del af det relativt rige \u00f8kosystem i Spring Framework, der ogs\u00e5 kan bruges som et facad til AWS Lambda, Azure Functions og OpenWhisk,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fnproject\">Projekt Fn<\/a><\/noindex>, st\u00f8ttet af Oracle.<\/li>\n<\/ul>\n<p><\/p>\n<p>Alle disse er helt uafh\u00e6ngige af cloud-l\u00f8sninger, hvilket betyder, at de kan installeres i enhver cloud, herunder din egen, offentlige eller private, og selvf\u00f8lgelig p\u00e5 Exoscale.<\/p>\n<p><\/p>\n<h2 id=\"kak-proekt-fn-ustroen\">Hvordan Projekt Fn fungerer<\/h2>\n<p><\/p>\n<p>Fn er helt baseret p\u00e5 Docker og best\u00e5r af to hovedkomponenter:<\/p>\n<p><\/p>\n<ul>\n<li>En CLI-program, der er designet til at administrere alle aspekter af Fn-infrastrukturen og interagere med Fn-serveren,<\/li>\n<li>Selve Fn-serveren, en almindelig applikation pakket i en container til Docker.<\/li>\n<\/ul>\n<p><\/p>\n<p>Funktioner, der implementeres i Fn, k\u00f8res ogs\u00e5 i separate containere, hvilket g\u00f8r det muligt at underst\u00f8tte mange programmeringssprog, eksempelvis\u2026 Clojure!<\/p>\n<p><\/p>\n<p>Argumenter til funktioner sendes til standard input (STDIN), og resultater skrives til standard output (STDOUT). Hvis argumenter eller returnerede v\u00e6rdier ikke er simple v\u00e6rdier (f.eks. JSON-objekt), kan de konverteres ved hj\u00e6lp af det abstraheringslag, som Fn selv tilbyder i form af et funktion udviklingss\u00e6t (FDK).<\/p>\n<p><\/p>\n<p>For convenience, there are built-in template sets that facilitate the deployment of FaaS across a wide range of different languages and their versions (Go, various versions of Java, Python, etc.).<\/p>\n<p><\/p>\n<p>Creating FaaS is simple by following this scheme:<\/p>\n<p><\/p>\n<ul>\n<li>Deploy the function using the Fn CLI: a configuration file for the application is created based on the chosen template.<\/li>\n<li>We release our function, again using the Fn CLI: the container image is placed in a repository, after which the server is notified of the existence and location of this image.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger vores egen serverless baseret p\u00e5 Fn\" src=\"\/wp-content\/uploads\/2019\/11\/5add8b58c80e976cd61a156fdd0fba11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>The principle of deploying functions in Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"lokalnaya-ustanovka-i-testirovanie-besservernyh-funkciy\">Local installation and testing of serverless functions<\/h2>\n<p><\/p>\n<p>Let\u2019s start by installing Fn on the local machine. First, install Docker as required by Fn. We assume we are on Debian\/Ubuntu:<\/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>Or use the package manager\/build of Docker according to your system. Then you can go straight to installing the Fn CLI. For example, using 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>If you are working on OSX with Homebrew installed, you can take a different route:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ brew install fn\n\n==&gt; Downloading https:\/\/homebrew.bintray.com\/bottles\/fn-0.5.8.high_sierra.bottle.tar.gz\n==&gt; Downloading from 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 files, 16.7MB<\/code><\/pre>\n<p><\/p>\n<p>Now everything is ready for the initial deployment of our function using the CLI. For simplicity, we will use the built-in runtime environment, for example, Node:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn init --runtime node --trigger http hellonode\n\nCreating function at: \/hellonode\nFunction boilerplate generated.\nfunc.yaml created.<\/code><\/pre>\n<p><\/p>\n<p>A new directory will be created <code>hellonode<\/code> for further development of our Fn function with some basic configuration files. Inside the newly created directory, you can create your application following the standards of your chosen language or runtime environment:<\/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 creates the initial project structure, generates the file <code>func.yaml<\/code>, containing the necessary settings for Fn, and sets the template for the code in the language you have chosen.<\/p>\n<p><\/p>\n<p>In the case of the Node runtime, this means:<\/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>Now we will quickly test our function locally to see how everything works.<\/p>\n<p><\/p>\n<p>For starters, we will launch the Fn server. As mentioned, the Fn server is a Docker container, so after starting it will fetch the image from the Docker registry.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn start -d                    # start the local server in the background\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>For at starte vores funktion skal den \"udrulles\". Dette kr\u00e6ver <code>the application name<\/code>: in Fn, all applications must be defined as namespaces for related functions.<\/p>\n<p><\/p>\n<p>The Fn CLI will search for a file <code>func.yaml<\/code> in the current directory, which will be used for function configuration. So first we need to navigate to our directory <code>hellonode<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cd hellonode\n$ fn deploy --app fnexo --local  # deploy the function locally, application name - fnexo.\n                                 # the local parameter does not push the image to the remote registry,\n                                 # running it directly\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>As can be seen from the command output, a new Docker container image is being created that contains our function. The function is ready to be invoked, and we have two ways to do this:<\/p>\n<p><\/p>\n<ul>\n<li>using the Fn command <code>invoke<\/code><\/li>\n<li>invoking directly via <code>http<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Kald <code>invoke<\/code> Fn simply emulates HTTP functionality for tests, which is convenient for quick checks:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn invoke fnexo hellonode      # invoke the hellonode function of the fnexo application\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>To invoke the function directly, you need to know the full URL:<\/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>The Fn server provides its functions through port 8080, and it seems that the function URL follows the pattern <code>t\/app\/function<\/code>, men ikke fuldst\u00e6ndigt. Gennem HTTP kaldes funktionen ikke direkte, men gennem det s\u00e5kaldte trigger, som, som navnet antyder, \"aktiverer\" kaldet til funktionen. Triggere defineres i <code>`func.yml<\/code> projektet:<\/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    # Trigger URL<\/code><\/pre>\n<p><\/p>\n<p>We can change the trigger name to match the function name, which will simplify it all:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">triggers:\n- name: hellonode-trigger\n  type: http\n  source: \/hellonode    # matches the function name<\/code><\/pre>\n<p><\/p>\n<p>Then we run the deployment of the function once again and invoke it from the new 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>Det hele fungerer! Det er det rette tidspunkt at g\u00e5 videre til praktiske eksperimenter og offentligg\u00f8re vores FaaS p\u00e5 serveren!<\/p>\n<p><\/p>\n<h2 id=\"ustanovka-servisov-besservernyh-funkciy-na-sobstvennoy-infrastrukture\">Installation af serverl\u00f8se funktioner p\u00e5 egen infrastruktur<\/h2>\n<p><\/p>\n<p>Lad os hurtigt installere en virtuel maskine ved hj\u00e6lp af Exoscale CLI. Hvis du endnu ikke har konfigureret den, kan du benytte <noindex><a rel=\"nofollow\" href=\"https:\/\/community.exoscale.com\/documentation\/tools\/exoscale-command-line-interface\/\">vores hurtige ops\u00e6tningsvejledning<\/a><\/noindex>. Det er et fantastisk v\u00e6rkt\u00f8j, der vil \u00f8ge din produktivitet endnu mere. <strong>Husk, at du skal konfigurere en regel for at \u00e5bne port 8080 i Security Group!<\/strong> F\u00f8lgende kommandoer vil starte en ren virtuel maskine, der er klar til at hoste vores funktioner:<\/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>Herefter kan du SSH ind p\u00e5 den virtuelle maskine og installere Fn fjernserveren:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ exo ssh fn-server\n\nThe authenticity of host '185.19.30.175 (185.19.30.175)' can't be established.\nECDSA key fingerprint is SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.\nAre you sure you want to continue connecting (yes\/no)? yes\nWarning: Permanently added '185.19.30.175' (ECDSA) to the list of known hosts.\nWelcome to Ubuntu 18.04 LTS (GNU\/Linux 4.15.0-20-generic x86_64)<\/code><\/pre>\n<p><\/p>\n<p>Installer derefter Docker og Fn-serveren ligesom f\u00f8r p\u00e5 den lokale maskine, og start serveren:<\/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 er klar til at modtage funktioner! For at sende funktioner til den fjernserver skal vi bruge kommandoen <code>deploy<\/code> fra den lokale computer, uden flaget <code>--local<\/code>.<\/p>\n<p><\/p>\n<p>Derudover kr\u00e6ver Fn, at der angives placeringen af Fn-serveren og Docker-registret. Disse indstillinger kan fasts\u00e6ttes via milj\u00f8variabler <code>FN_API_URL<\/code> og <code>FN_REGISTRY<\/code> henholdsvis, men der tilbydes ogs\u00e5 en mere komfortabel metode til nem administration af oprettelse og styring af konfigurationer til udrulning.<\/p>\n<p><\/p>\n<p>I Fn-termer kaldes konfigurationen til udrulning <code>context<\/code>. F\u00f8lgende kommando vil oprette en kontekst:<\/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>Du kan se de tilg\u00e6ngelige kontekster p\u00e5 f\u00f8lgende m\u00e5de:<\/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>Og skifte til den nyligt oprettede kontekst s\u00e5ledes:<\/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>Fra dette punkt vil Fn-funktioner begynde at indl\u00e6se Docker-billeder ved hj\u00e6lp af den valgte konto p\u00e5 DockerHub (i mit tilf\u00e6lde \u2014 <code>nfrankel<\/code>), hvorefter en meddelelse sendes til den fjerne server (i dette eksempel \u2014 <code>http:\/\/185.19.30.175:8080<\/code>) om placeringen og versionen af det nyeste billede, der indeholder din funktion.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn deploy --app fnexo .   # k\u00f8rer lokalt fra mappen hellonode\n\nUdrulning af funktion p\u00e5: \\\/.\nUdrulning af hellonode til app: fnexo\nOpgraderet til version 0.0.5\nBygger billede nfrankel\\\/hellonode:0.0.5 .<\/code><\/pre>\n<p><\/p>\n<p>Endelig:<\/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=\"Vi bygger vores egen serverless baseret p\u00e5 Fn\" src=\"\/wp-content\/uploads\/2019\/11\/51a7b88cd6bf4953740cfac937b0acc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Livscyklussen for en funktion i serverless computing baseret p\u00e5 Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"preimuschestva-besservernyh-vychisleniy-na-svoih-moschnostyah\">Fordele ved serverless computing p\u00e5 dine egne ressourcer<\/h2>\n<p><\/p>\n<p>Serverless computing er en praktisk l\u00f8sning til hurtig implementering af uafh\u00e6ngige dele af applikationen, der interagerer med mere komplekse applikationer eller mikrotjenester.<\/p>\n<p><\/p>\n<p>Det er ofte forbundet med skjulte omkostninger ved at binde sig til en valgt udbyder, hvilket, afh\u00e6ngigt af den specifikke brugssituation og volumen, kan f\u00f8re til h\u00f8jere udgifter og mindre fleksibilitet i fremtiden.<\/p>\n<p><\/p>\n<p>Multicloud- og hybridcloud-arkitekturer lider ogs\u00e5 under s\u00e5danne forhold, da man hurtigt kan finde sig selv i en situation, hvor man gerne vil bruge serverless computing, men p\u00e5 grund af virksomhedspolitik kan det v\u00e6re umuligt.<\/p>\n<p><\/p>\n<p>Fn er ganske nemt at arbejde med, kan give n\u00e6sten samme FaaS-gr\u00e6nseflade med minimale omkostninger. Den fjerner enhver binding til udbyderen, kan installeres lokalt eller hos enhver \u00f8nsket cloud-l\u00f8sning. Der er ogs\u00e5 frihed til at v\u00e6lge programmeringssprog.<\/p>\n<p><\/p>\n<p>Artiklen pr\u00e6senterer kun grundlaget for Fn, men det er ret let at oprette sit eget runtime-milj\u00f8, og den samlede arkitektur kan udvides ved at bruge Fn-loadbalancer eller ved at placere Fn bag en proxy for sikkerhed.<\/p>\n<p>Kilde: <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\/da\/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=\"da_DK\" \/>\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\/da\/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\udd47Byg din egen serverless l\u00f8sning baseret p\u00e5 Fn | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/52562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=52562"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/52562\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=52562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=52562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=52562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}