{"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":"Stiamo costruendo il nostro serverless basato su Fn","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Stiamo costruendo 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 serverless<\/a><\/noindex> \u2014 \u00e8 una delle tendenze pi\u00f9 significative nel cloud computing. Il principio fondamentale \u00e8 che l'infrastruttura \u00e8 responsabilit\u00e0 del fornitore di servizi, non degli sviluppatori DevOps. La scalabilit\u00e0 delle risorse si adatta automaticamente al carico e offre un'elevata velocit\u00e0 di cambiamento.<\/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>Il primo fornitore di servizi cloud ad offrire FaaS con AWS Lambda \u00e8 stato Amazon, da cui \u00e8 derivato questo nome. Anche altri fornitori di servizi cloud offrono 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 offrono calcolo serverless, scalabilit\u00e0 automatica e pagamento solo per le risorse effettivamente utilizzate, ma legano i clienti al loro prodotto proprietario. Tuttavia, esistono alternative gratuite open source per implementare il calcolo serverless. \u00c8 importante 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 in incubazione da 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 chiamato Spring Framework, che pu\u00f2 anche funzionare come facciata per AWS Lambda, Azure Functions e OpenWhisk,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fnproject\">Progetto Fn<\/a><\/noindex>, supportato da Oracle.<\/li>\n<\/ul>\n<p><\/p>\n<p>Tutti sono completamente indipendenti dai fornitori di cloud, il che significa che possono essere installati in qualsiasi cloud, compresi i vostri, pubblici o privati, 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 si basa completamente su Docker e consiste in due componenti principali:<\/p>\n<p><\/p>\n<ul>\n<li>un programma CLI destinato a gestire tutti gli aspetti dell'infrastruttura Fn e interagire con il server Fn,<\/li>\n<li>Il server Fn stesso, una normale applicazione confezionata in un contenitore Docker.<\/li>\n<\/ul>\n<p><\/p>\n<p>Le funzioni distribuite in Fn vengono eseguite anch'esse in contenitori separati, il che consente il supporto di molti linguaggi di programmazione, come ad esempio... Clojure!<\/p>\n<p><\/p>\n<p>Gli argomenti delle funzioni vengono passati all'input standard (STDIN), mentre i risultati vengono scritti sull'output standard (STDOUT). Se gli argomenti o i valori restituiti non sono semplici valori (ad esempio, oggetti JSON), possono essere convertiti attraverso uno strato di astrazione fornito dallo stesso Fn sotto forma di Function Development Kit (FDK).<\/p>\n<p><\/p>\n<p>Per facilitare, sono disponibili set di modelli integrati che semplificano il deployment di FaaS su un'ampia lista di linguaggi e relative versioni (Go, diverse versioni di Java, Python, ecc.).<\/p>\n<p><\/p>\n<p>Creare un FaaS \u00e8 semplice seguendo questo schema:<\/p>\n<p><\/p>\n<ul>\n<li>Deployiamo la funzione utilizzando il CLI di Fn: viene creato un file di configurazione dell'applicazione per Fn, basato sul modello selezionato.<\/li>\n<li>Distribuiamo la nostra funzione, sempre utilizzando il CLI di Fn: l'immagine del contenitore viene inviata a un repository, dopodich\u00e9 il server viene informato dell'esistenza e della posizione di questa immagine.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Stiamo costruendo il nostro serverless basato su Fn\" src=\"\/wp-content\/uploads\/2019\/11\/5add8b58c80e976cd61a156fdd0fba11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Il principio di fornitura delle funzioni in Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"lokalnaya-ustanovka-i-testirovanie-besservernyh-funkciy\">Installazione locale e testing delle funzioni serverless<\/h2>\n<p><\/p>\n<p>Iniziamo a installare Fn sulla macchina locale. Prima di tutto, installiamo Docker, come richiesto da Fn. Si presume che siamo su 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 utilizza il gestore di pacchetti\/compilazione di Docker secondo il tuo sistema. Successivamente, possiamo passare direttamente all'installazione del CLI di Fn. Ad esempio, usando 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 seguire 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>Ora tutto \u00e8 pronto per il primo dispiegamento della nostra funzione utilizzando la CLI. Per semplicit\u00e0, utilizzeremo l'ambiente integrato per l'esecuzione, come Node:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn init --runtime node --trigger http hellonode\n\nCreando la funzione in: \/hellonode\nBoilerplate della funzione generato.\nfunc.yaml creato.<\/code><\/pre>\n<p><\/p>\n<p>Verr\u00e0 creato un nuovo catalogo <code>hellonode<\/code> per lo sviluppo successivo della nostra funzione Fn con alcuni file di configurazione di base. All'interno della cartella appena creata, puoi creare 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 configurazioni necessarie per Fn, e imposta un 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>Ora daremo un rapido sguardo alla nostra funzione localmente per vedere come funziona tutto.<\/p>\n<p><\/p>\n<p>Per iniziare, avviamo il server Fn. Come gi\u00e0 detto, il server Fn \u00e8 un contenitore Docker, quindi dopo l'avvio andr\u00e0 a prendere 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: Scaricamento da fnproject\/fnserver\nff3a5c916c92: Download completo\n1a649ea86bca: Download completo\nce35f4d5f86a: Download completo\n\n...\n\nStato: Immagine pi\u00f9 recente scaricata per fnproject\/fnserver:latest\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>il nome dell'applicazione<\/code>: in Fn tutte le applicazioni devono essere definite come spazi dei nomi per le funzioni correlate.<\/p>\n<p><\/p>\n<p>Fn CLI cercher\u00e0 un file <code>func.yaml<\/code> nella directory corrente che sar\u00e0 utilizzato per configurare la funzione. Quindi prima dobbiamo andare nella nostra directory. <code>hellonode<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cd hellonode\n$ fn deploy --app fnexo --local  # distribuiamo la funzione localmente, il nome dell'app \u00e8 fnexo.\n                                 # il parametro local non carica l'immagine su un registro remoto,\n                                 # avviandola direttamente\n\nDistribuendo hellonode all'app: fnexo\nAggiornato alla versione 0.0.2\nCostruendo l'immagine nfrankel\/hellonode:0.0.3 .\nAggiornando la funzione hellonode utilizzando l'immagine nfrankel\/hellonode:0.0.3...\nApp creata con successo: fnexo\nFunzione creata con successo: hellonode con nfrankel\/hellonode:0.0.3\nAttivatore creato con successo: hellonode-trigger<\/code><\/pre>\n<p><\/p>\n<p>Come puoi vedere dall'output del comando, viene creata una nuova immagine del contenitore Docker contenente la nostra funzione. La funzione \u00e8 pronta per essere chiamata, e abbiamo due modi per farlo:<\/p>\n<p><\/p>\n<ul>\n<li>utilizzando il comando Fn <code>invoke<\/code><\/li>\n<li>chiamandola direttamente attraverso <code>http<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>La chiamata <code>invoke<\/code> Fn emula semplicemente il lavoro HTTP per i test, che \u00e8 comodo per un rapido controllo:<\/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 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 sembra che l'URL della funzione corrisponda allo 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> del 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, rendendo tutto pi\u00f9 semplice:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">triggers:\n- name: hellonode-trigger\n  type: http\n  source: \/hellonode    # coincide con il nome della funzione<\/code><\/pre>\n<p><\/p>\n<p>Poi rilanciamo 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\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>Tutto funziona! \u00c8 tempo di passare a esperimenti pratici e pubblicare il nostro FaaS sul server!<\/p>\n<p><\/p>\n<h2 id=\"ustanovka-servisov-besservernyh-funkciy-na-sobstvennoy-infrastrukture\">Installazione di servizi per funzioni serverless sulla propria infrastruttura<\/h2>\n<p><\/p>\n<p>Facciamo rapidamente impostare una macchina virtuale utilizzando la CLI di Exoscale. Se non l'hai ancora configurata, puoi seguire <noindex><a rel=\"nofollow\" href=\"https:\/\/community.exoscale.com\/documentation\/tools\/exoscale-command-line-interface\/\">la nostra guida per un rapido avvio<\/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 per 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 alla macchina virtuale tramite ssh 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.\nL'impronta della chiave ECDSA \u00e8 SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.\nSei sicuro di voler continuare la connessione (s\u00ec\/no)? s\u00ec\nAttenzione: '185.19.30.175' (ECDSA) \u00e8 stato aggiunto permanentemente all'elenco degli host conosciuti.\nBenvenuto in Ubuntu 18.04 LTS (GNU\/Linux 4.15.0-20-generic x86_64)<\/code><\/pre>\n<p><\/p>\n<p>Successivamente, installiamo Docker e il server Fn proprio come 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 a ricevere funzioni! Per inviare funzioni al server remoto utilizzeremo il comando <code>deploy<\/code> dal computer locale, tralasciando 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 variabili di ambiente <code>FN_API_URL<\/code> e <code>FN_REGISTRY<\/code> di conseguenza, ma \u00e8 disponibile anche un modo pi\u00f9 semplice per gestire 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 comando seguente 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 per passare al contesto appena creato, usa:<\/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>Da questo momento in poi, il deployment delle funzioni 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>) riguardo la posizione e la 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 cartella hellonode\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>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=\"Stiamo costruendo il nostro serverless basato su Fn\" src=\"\/wp-content\/uploads\/2019\/11\/51a7b88cd6bf4953740cfac937b0acc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Il ciclo di vita di una funzione nel computing serverless basato su Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"preimuschestva-besservernyh-vychisleniy-na-svoih-moschnostyah\">Vantaggi del calcolo serverless sulla propria infrastruttura<\/h2>\n<p><\/p>\n<p>Il calcolo serverless \u00e8 una soluzione conveniente per l'implementazione rapida di parti indipendenti di un'applicazione che interagiscono con applicazioni pi\u00f9 complesse o microservizi.<\/p>\n<p><\/p>\n<p>Spesso ci\u00f2 \u00e8 legato ai costi nascosti dell'impegno verso un fornitore specifico, il che, a seconda dello specifico caso d'uso e della scala, pu\u00f2 portare a spese pi\u00f9 elevate e a una riduzione della flessibilit\u00e0 in futuro.<\/p>\n<p><\/p>\n<p>Anche le architetture cloud multi-cloud e ibride ne risentono, poich\u00e9 ci si pu\u00f2 facilmente trovare nella situazione in cui si vorrebbe utilizzare il calcolo serverless, ma a causa delle politiche aziendali potrebbe non essere possibile farlo.<\/p>\n<p><\/p>\n<p>Fn \u00e8 abbastanza semplice da usare e pu\u00f2 fornire un'interfaccia quasi identica a quella del FaaS, con costi contenuti. Esso elimina qualsiasi vincolo con il fornitore, e pu\u00f2 essere installato localmente o presso qualsiasi fornitore di servizi cloud a scelta. Inoltre, c'\u00e8 libert\u00e0 nella scelta del linguaggio di programmazione.<\/p>\n<p><\/p>\n<p>L'articolo presenta solo le basi di Fn, ma creare un ambiente di esecuzione personale \u00e8 piuttosto semplice, e l'architettura generale pu\u00f2 essere ampliata utilizzando un bilanciatore di carico Fn, oppure posizionando Fn dietro un proxy per 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 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\/it\/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=\"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: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\/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\udd47Costruisci il tuo serverless basato su Fn | ProHoster","description":"Il computing serverless \u00e8 una delle tendenze pi\u00f9 evidenti nel cloud computing. Il principio fondamentale \u00e8 che l'infrastruttura \u00e8 responsabilit\u00e0 del fornitore di servizi, non dei DevOps. La scalabilit\u00e0 delle risorse si adatta automaticamente al carico ed \u00e8 caratterizzata da un'elevata velocit\u00e0 di cambiamento. Un'altra caratteristica comune \u00e8 la tendenza a minimizzare e concentrare il codice, motivo per cui il computing serverless \u00e8 talvolta chiamato \"funzione come servizio\".","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: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\/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"},"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}]}}