{"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\/it\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","title":{"rendered":"Costruiamo il nostro serverless basato su Fn","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Costruiamo il nostro serverless basato su 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\">Calcolo senza server<\/a><\/noindex> \u2014 una delle tendenze pi\u00f9 evidenti nel cloud computing. Il principio fondamentale \u00e8 che l'infrastruttura \u00e8 una preoccupazione non degli sviluppatori DevOps, ma del fornitore del servizio. Il dimensionamento delle risorse si adatta automaticamente al carico e ha un'elevata velocit\u00e0 di cambiamento.<\/p>\n<p><\/p>\n<p>Un'altra caratteristica comune \u00e8 la tendenza a minimizzare e focalizzare il codice, per cui il calcolo senza server \u00e8 talvolta chiamato \u201cfunzione come servizio\u201d (FaaS).<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Storicamente, il primo fornitore di servizi cloud a offrire FaaS con AWS Lambda \u00e8 stato Amazon, da cui deriva questo nome. Altri fornitori di servizi cloud offrono anche analoghi:<\/p>\n<p><\/p>\n<ul>\n<li>Cloud Functions di Google<\/li>\n<li>Azure Functions di Microsoft<\/li>\n<\/ul>\n<p><\/p>\n<p>Tutte queste aziende forniscono calcolo senza server, ridimensionamento automatico e pagamento solo per le risorse effettivamente utilizzate, ma vincolano i clienti al loro prodotto proprietario. Tuttavia, esistono alternative gratuite open source per organizzare il calcolo senza server. Vale la pena notare:<\/p>\n<p><\/p>\n<ul>\n<li>La piattaforma <noindex><a rel=\"nofollow\" href=\"https:\/\/openwhisk.apache.org\/\">Apache OpenWhisk<\/a><\/noindex>, sviluppata nell'incubatore di IBM,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.spring.io\/spring-cloud-function\/\">Spring Cloud Functions<\/a><\/noindex>, come parte di un ecosistema piuttosto ricco di Spring Framework, che pu\u00f2 anche essere utilizzato come facciata per AWS Lambda, Azure Functions e OpenWhisk,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fnproject\">Il progetto Fn<\/a><\/noindex>, supportato da Oracle.<\/li>\n<\/ul>\n<p><\/p>\n<p>Tutti sono completamente indipendenti dai cloud, ovvero possono essere installati in qualsiasi cloud, incluso il proprio, pubblico o privato, e naturalmente in Exoscale.<\/p>\n<p><\/p>\n<h2 id=\"kak-proekt-fn-ustroen\">Come \u00e8 strutturato il progetto Fn<\/h2>\n<p><\/p>\n<p>Fn \u00e8 completamente basato su Docker, composto da due componenti principali:<\/p>\n<p><\/p>\n<ul>\n<li>CLI del programma, progettata per gestire tutti gli aspetti dell'infrastruttura Fn, che interagisce con il server Fn,<\/li>\n<li>Il vero e proprio server Fn, un'applicazione ordinaria confezionata in un contenitore per Docker.<\/li>\n<\/ul>\n<p><\/p>\n<p>Le funzioni distribuite in Fn vengono eseguite in contenitori separati, il che consente di supportare un numero considerevole di linguaggi di programmazione, ad esempio... Clojure!<\/p>\n<p><\/p>\n<p>Gli argomenti delle funzioni vengono passati tramite standard input (STDIN), i risultati vengono scritti su standard output (STDOUT). Se gli argomenti o i valori restituiti non sono valori semplici (ad esempio, oggetto JSON), possono essere trasformati tramite il livello di astrazione fornito dallo stesso Fn sotto forma di kit di sviluppo delle funzioni (FDK).<\/p>\n<p><\/p>\n<p>Per comodit\u00e0, vengono offerti set di modelli integrati che semplificano il deployment di FaaS su un ampio elenco di diversi linguaggi e le loro versioni (Go, varie versioni di Java, Python, ecc.).<\/p>\n<p><\/p>\n<p>Creare FaaS \u00e8 semplice, seguendo questo schema:<\/p>\n<p><\/p>\n<ul>\n<li>Procediamo al deployment della funzione utilizzando la CLI Fn: viene creato un file di configurazione dell'applicazione per Fn, basato sul modello scelto.<\/li>\n<li>Distribuiamo la nostra funzione, ancora una volta utilizzando la CLI Fn: l'immagine del contenitore viene caricata in un repository, dopo di che il server viene avvisato dell'esistenza e del posizionamento di questa immagine.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Costruiamo il nostro serverless basato su Fn\" src=\"\/wp-content\/uploads\/2019\/11\/5add8b58c80e976cd61a156fdd0fba11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Principio di fornitura delle funzioni in Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"lokalnaya-ustanovka-i-testirovanie-besservernyh-funkciy\">Installazione locale e test delle funzioni serverless<\/h2>\n<p><\/p>\n<p>Iniziamo a installare Fn sulla macchina locale. Prima si deve installare Docker, come richiesto da Fn. Si presume che utilizziamo 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>Oppure usa il gestore pacchetti\/compila Docker in base al tuo sistema. Poi, puoi passare direttamente all'installazione della CLI Fn. Ad esempio, utilizzando 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>Se stai lavorando su OSX con Homebrew installato, puoi andare per un'altra strada:<\/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>Adesso tutto \u00e8 pronto per il primo deployment della nostra funzione usando la CLI. Per semplicit\u00e0, utilizzeremo l'ambiente integrato per l'esecuzione, ad esempio 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>Verr\u00e0 creato un nuovo catalogo <code>hellonode<\/code> per ulteriori sviluppi della nostra funzione Fn con alcuni file di configurazione di base. All'interno del catalogo appena creato puoi sviluppare la tua applicazione, seguendo gli standard del linguaggio o dell'ambiente di esecuzione scelto:<\/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 crea la struttura iniziale del progetto, genera il file <code>func.yaml<\/code>, contenente le impostazioni necessarie per Fn, e stabilisce il modello per il codice nel linguaggio che hai scelto.<\/p>\n<p><\/p>\n<p>Nel caso dell'ambiente di esecuzione Node, questo significa:<\/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>Adesso testeremo rapidamente la nostra funzione localmente per vedere come funziona tutto.<\/p>\n<p><\/p>\n<p>Per cominciare, avvieremo il server Fn. Come gi\u00e0 detto, il server Fn \u00e8 un container Docker, quindi dopo l'avvio si connetter\u00e0 e scaricher\u00e0 l'immagine dal registro Docker.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn start -d                    # avviamo il server locale in background\n\nImpossibile trovare l'immagine 'fnproject\/fnserver:latest' localmente\nlatest: Recupero da fnproject\/fnserver\nff3a5c916c92: Download completato\n1a649ea86bca: Download completato\nce35f4d5f86a: Download completato\n\n...\n\nStatus: Immagine pi\u00f9 recente scaricata per fnproject\/fnserver:latest\n668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5<\/code><\/pre>\n<p><\/p>\n<p>Per avviare la nostra funzione, \u00e8 necessario 'rilasciarla'. A questo scopo \u00e8 richiesto <code>il nome dell'applicazione<\/code>: in Fn tutte le applicazioni devono essere definite come spazi dei nomi per funzioni correlate.<\/p>\n<p><\/p>\n<p>Fn CLI cercher\u00e0 il file <code>func.yaml<\/code> nella directory corrente, che verr\u00e0 utilizzato per configurare la funzione. Quindi, prima di tutto, dobbiamo passare alla nostra directory <code>hellonode<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cd hellonode\n$ fn deploy --app fnexo --local  # rilasciamo la funzione localmente, nome dell'applicazione - fnexo.\n                                 # il parametro local non carica l'immagine nel registro remoto,\n                                 # eseguendola direttamente\n\nRilascio hellonode nell'app: fnexo\nAggiornato alla versione 0.0.2\nCreazione dell'immagine nfrankel\/hellonode:0.0.3 .\nAggiornamento della funzione hellonode utilizzando l'immagine nfrankel\/hellonode:0.0.3...\nApp creato con successo:  fnexo\nFunzione creata con successo: hellonode con nfrankel\/hellonode:0.0.3\nTrigger creato con successo: hellonode-trigger<\/code><\/pre>\n<p><\/p>\n<p>Come si pu\u00f2 vedere dall'output del comando, viene creata una nuova immagine del container per Docker contenente la nostra funzione. La funzione \u00e8 pronta per essere chiamata, e ci sono due modi per farlo:<\/p>\n<p><\/p>\n<ul>\n<li>utilizzando il comando Fn <code>invoke<\/code><\/li>\n<li>richiamandola direttamente attraverso <code>http<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Chiamata <code>invoke<\/code> Fn semplicemente emula l'operazione tramite HTTP per i test, il che \u00e8 comodo per una rapida verifica:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn invoke fnexo hellonode      # chiamiamo la funzione hellonode dell'app fnexo\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>Per poter chiamare la funzione direttamente, \u00e8 necessario conoscere l'URL completo:<\/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>Il server Fn fornisce le sue funzioni tramite la porta 8080, e, a quanto pare, l'URL della funzione corrisponde allo schema <code>t\/app\/function<\/code>, ma non completamente. Tramite HTTP, la funzione non viene chiamata direttamente, ma attraverso quello che viene chiamato trigger, che secondo il suo nome 'attiva' la chiamata della funzione. I trigger sono definiti in <code>`func.yml<\/code> progetto:<\/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 del trigger<\/code><\/pre>\n<p><\/p>\n<p>Possiamo cambiare il nome del trigger affinch\u00e9 corrisponda al nome della funzione, semplificando tutto:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">triggers:\n- name: hellonode-trigger\n  type: http\n  source: \/hellonode    # corrisponde al nome della funzione<\/code><\/pre>\n<p><\/p>\n<p>Poi avviamo di nuovo la distribuzione della funzione e la chiamiamo dal nuovo 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\":\"Ciao Mondo\"}<\/code><\/pre>\n<p><\/p>\n<p>Tutto funziona! \u00c8 il momento di passare agli esperimenti pratici e pubblicare il nostro FaaS sul server!<\/p>\n<p><\/p>\n<h2 id=\"ustanovka-servisov-besservernyh-funkciy-na-sobstvennoy-infrastrukture\">Installazione dei servizi delle funzioni serverless sulla propria infrastruttura<\/h2>\n<p><\/p>\n<p>Installiamo rapidamente una macchina virtuale utilizzando CLI Exoscale. Se non l'hai ancora configurata, puoi usare <noindex><a rel=\"nofollow\" href=\"https:\/\/community.exoscale.com\/documentation\/tools\/exoscale-command-line-interface\/\">la nostra guida per un avvio rapido<\/a><\/noindex>. \u00c8 uno strumento fantastico che aumenter\u00e0 ulteriormente la tua produttivit\u00e0. <strong>Non dimenticare di configurare la regola per aprire la porta 8080 nel Security Group!<\/strong> I seguenti comandi avvieranno una macchina virtuale pulita, pronta ad ospitare le nostre funzioni:<\/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>Poi puoi accedere via ssh alla macchina virtuale e installare il server Fn:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ exo ssh fn-server\n\nL'autenticit\u00e0 dell'host '185.19.30.175 (185.19.30.175)' non pu\u00f2 essere stabilita.\nLa chiave ECDSA \u00e8 SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.\nSei sicuro di voler continuare a connetterti (s\u00ec\/no)? s\u00ec\nAttenzione: '185.19.30.175' (ECDSA) \u00e8 stato aggiunto in modo permanente all'elenco degli host noti.\nBenvenuto in Ubuntu 18.04 LTS (GNU\/Linux 4.15.0-20-generic x86_64)<\/code><\/pre>\n<p><\/p>\n<p>Poi installiamo Docker e il server Fn come gi\u00e0 fatto sulla macchina locale, avviando il 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 \u00e8 pronto per ricevere funzioni! Per la distribuzione delle funzioni sul server remoto utilizzeremo il comando <code>deploy<\/code> dal computer locale, escludendo il flag <code>--local<\/code>.<\/p>\n<p><\/p>\n<p>Inoltre, Fn richiede di specificare la posizione del server Fn e del registro Docker. Questi parametri possono essere impostati tramite le variabili di ambiente <code>FN_API_URL<\/code> e <code>FN_REGISTRY<\/code> rispettivamente, ma \u00e8 offerto anche un modo pi\u00f9 comodo per gestire facilmente la creazione e la gestione delle configurazioni per il deployment.<\/p>\n<p><\/p>\n<p>In termini di Fn, la configurazione per il deployment \u00e8 chiamata <code>context<\/code>. Il seguente comando creer\u00e0 un contesto:<\/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>Puoi visualizzare i contesti disponibili in questo modo:<\/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>E passare al contesto appena creato in questo modo:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"> $ fn use context exoscale\n\n Ora si sta utilizzando il contesto: exoscale<\/code><\/pre>\n<p><\/p>\n<p>A partire da questo punto, la funzione di distribuzione Fn caricher\u00e0 le immagini Docker utilizzando l'account selezionato su DockerHub (nel mio caso \u2014 <code>nfrankel<\/code>), dopo di che notificher\u00e0 il server remoto (in questo esempio \u2014 <code>http:\/\/185.19.30.175:8080<\/code>) sulla posizione e sulla versione dell'ultima immagine contenente la tua funzione.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn deploy --app fnexo .   # eseguito sulla macchina locale dalla directory hellonode\n\nDistribuzione della funzione in: \\\nDistribuzione di hellonode all'app: fnexo\nAggiornato alla versione 0.0.5\nCreazione dell'immagine nfrankel\\\/hellonode:0.0.5 .<\/code><\/pre>\n<p><\/p>\n<p>Infine:<\/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=\"Costruiamo il nostro serverless basato su Fn\" src=\"\/wp-content\/uploads\/2019\/11\/51a7b88cd6bf4953740cfac937b0acc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Ciclo di vita della funzione nel calcolo serverless basato su Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"preimuschestva-besservernyh-vychisleniy-na-svoih-moschnostyah\">Vantaggi del calcolo serverless sulle proprie risorse<\/h2>\n<p><\/p>\n<p>Il calcolo serverless \u00e8 una soluzione comoda per l'implementazione rapida di parti indipendenti dell'applicazione che interagiscono con applicazioni o microservizi pi\u00f9 complessi.<\/p>\n<p><\/p>\n<p>Questo \u00e8 spesso associato al costo nascosto di vincolarsi a un fornitore scelto, il che, a seconda del caso d'uso specifico e del volume, pu\u00f2 portare a costi pi\u00f9 elevati e a una riduzione della flessibilit\u00e0 in futuro.<\/p>\n<p><\/p>\n<p>Le architetture multi-cloud e ibride risentono anche di questo, infatti ci si pu\u00f2 facilmente trovare in una situazione in cui si desidera utilizzare il calcolo serverless, ma a causa delle politiche aziendali potrebbe non essere possibile.<\/p>\n<p><\/p>\n<p>Fn \u00e8 abbastanza semplice da utilizzare, pu\u00f2 fornire un'interfaccia FaaS quasi identica, con costi minimi. Eliminando qualsiasi vincolo di fornitore, pu\u00f2 essere installato localmente o su qualsiasi fornitore di servizi cloud a tua scelta. Inoltre, c'\u00e8 libert\u00e0 nella scelta del linguaggio di programmazione.<\/p>\n<p><\/p>\n<p>Questo articolo presenta solo le basi di Fn, ma creare un proprio ambiente di esecuzione \u00e8 abbastanza semplice, e l'architettura generale pu\u00f2 essere ampliata utilizzando un bilanciatore di carico Fn, o posizionando Fn dietro un proxy per la protezione.<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/475044\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0411\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u2014 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0445 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u0439 \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u2014 \u0437\u0430\u0431\u043e\u0442\u0430 \u043d\u0435 DevOps\u2019\u043e\u0432, \u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0443\u0441\u043b\u0443\u0433. \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0414\u0440\u0443\u0433\u0430\u044f \u043e\u0431\u0449\u0430\u044f \u0447\u0435\u0440\u0442\u0430 \u2014 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044f \u043a \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 &#171;\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430&#187; [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-52562","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Costruiamo il nostro serverless basato su Fn | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/52562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=52562"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/52562\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=52562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=52562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=52562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}