{"id":18983,"date":"2018-09-04T14:17:18","date_gmt":"2018-09-04T17:17:18","guid":{"rendered":"https:\/\/king.host\/blog\/?p=18983"},"modified":"2024-06-03T16:16:23","modified_gmt":"2024-06-03T19:16:23","slug":"serverless-com-openfaas-e-php","status":"publish","type":"post","link":"https:\/\/king.host\/blog\/tutoriais\/serverless-com-openfaas-e-php\/","title":{"rendered":"Como implementar Serverless com OpenFaaS e PHP"},"content":{"rendered":"<p>As arquiteturas sem servidor (serverless) s\u00e3o<strong> projetos de aplica\u00e7\u00f5es que incorporam servi\u00e7os \u201cBackend as a Service\u201d (BaaS)<\/strong> de terceiros e\/ou que incluem execu\u00e7\u00e3o de c\u00f3digo personalizado em cont\u00eaineres ef\u00eameros gerenciados em uma plataforma <strong>\u201cFunctions as a Service\u201d (FaaS)<\/strong>.<\/p>\n<p>Ao usar essas ideias e outras relacionadas, como aplica\u00e7\u00f5es single-page, <strong>estas arquiteturas removem grande parte da necessidade de um componente tradicional de servidor<\/strong>. As arquiteturas serverless podem se beneficiar de um custo operacional, <strong>complexidade<\/strong> e <strong>lead time de engenharia significativamente reduzidos<\/strong>, a um custo de maior depend\u00eancia de fornecedores e servi\u00e7os de suporte.<\/p>\n<h2>Como implementar fun\u00e7\u00f5es PHP Serverless com OpenFaaS<\/h2>\n<p><strong>Serverless computing<\/strong>, ou simplesmente serverless, \u00e9 um tema quente no mundo da arquitetura de software. Os fornecedores de nuvem \u201cBig Three\u201d &#8211; <strong><a href=\"https:\/\/www.amazon.com.br\/\" target=\"_blank\" rel=\"noopener\">Amazon<\/a><\/strong>, <a href=\"https:\/\/www.google.com.br\/\" target=\"_blank\" rel=\"noopener\"><strong>Google<\/strong><\/a> e <strong><a href=\"https:\/\/www.microsoft.com\/pt-br\" target=\"_blank\" rel=\"noopener\">Microsoft<\/a><\/strong> &#8211; investem pesado em Serverless, e vimos muitos livros, projetos de c\u00f3digo aberto, confer\u00eancias e fornecedores de software dedicados ao assunto.<\/p>\n<p>Neste artigo, vamos ver <strong>como podemos implementar serverless utilizando uma solu\u00e7\u00e3o open source, o <a href=\"https:\/\/www.openfaas.com\/\" target=\"_blank\" rel=\"noopener\">OpenFaaS<\/a><\/strong>.<\/p>\n<h2>O que \u00e9 o OpenFaas?<\/h2>\n<p>O <strong>OpenFaaS<\/strong> \u00e9 uma <strong>estrutura para criar fun\u00e7\u00f5es serverless em cont\u00eaineres<\/strong> (com o Docker e o Kubernetes).<\/p>\n<p>Com a ajuda de FaaS abertas, \u00e9 f\u00e1cil transformar qualquer coisa em uma fun\u00e7\u00e3o <strong>sem servidor<\/strong> que seja executada no <strong>Linux ou no Windows<\/strong>, por meio do <strong>Docker ou do Kubernetes<\/strong>. Ele fornece uma <strong>funcionalidade integrada<\/strong>, como infraestrutura de auto-recupera\u00e7\u00e3o, dimensionamento autom\u00e1tico e a capacidade de controlar todos os aspectos do cluster.<\/p>\n<p>Ent\u00e3o, basicamente, o OpenFaaS<strong> \u00e9 um conceito de decompor nossas aplica\u00e7\u00f5es em uma pequena unidade de trabalho<\/strong>. Um dos principais benef\u00edcios \u00e9 o fato de n\u00e3o precisarmos gerenciar a infraestrutura de aplica\u00e7\u00f5es, possibilitando aos desenvolvedores se concentrarem em fornecer valor de neg\u00f3cios. Vale refor\u00e7ar que o<strong>\u00a0serverless \u00e9 perfeito para dispositivos IoT, arquitetura de microsservi\u00e7os ou qualquer outro tipo de aplica\u00e7\u00e3o que precise ser eficiente<\/strong>.<\/p>\n<p>Al\u00e9m disso, o <strong>OpenFaaS permite criar e distribuir fun\u00e7\u00f5es \u201cserverless\u201d<\/strong> em um ambiente de computa\u00e7\u00e3o em nuvem.<\/p>\n<p>A \u201cfunction\u201d pode ser uma l\u00f3gica simples que voc\u00ea programa ou a execu\u00e7\u00e3o de um bin\u00e1rio para realizar uma a\u00e7\u00e3o.<\/p>\n<p>Abro aqui um par\u00eantese para comentar que o termo &#8220;serverless&#8221; \u00e9 um pouco inadequado, pois voc\u00ea ainda<strong> precisa de um servidor ou de muitos servidores<\/strong>, mas ao implantar sua fun\u00e7\u00e3o na nuvem, <strong>n\u00e3o precisa se preocupar em escalar ou gerenciar recursos<\/strong> de servidor f\u00edsico por conta pr\u00f3pria.<\/p>\n<p>Voltando ao OpenFaas, ele tem em destaque algumas funcionalidades como:<\/p>\n<ul>\n<li><strong>Facilidade de uso<\/strong> atrav\u00e9s do portal de interface do usu\u00e1rio e instala\u00e7\u00e3o com um clique;<\/li>\n<li>Escrever fun\u00e7\u00f5es em <strong>qualquer linguagem para Linux ou Windows<\/strong> e empacotar no formato de imagem Docker \/ OCI;<\/li>\n<li>Port\u00e1til &#8211; <strong>executado em hardware existente ou nuvem p\u00fablica\/privada<\/strong> &#8211; Kubernetes e Docker Swarm nativos;<\/li>\n<li><strong>CLI dispon\u00edvel<\/strong> com formato YAML para modelar e definir fun\u00e7\u00f5es;<\/li>\n<li><strong>Escala autom\u00e1tica<\/strong> \u00e0 medida que a demanda aumenta.<\/li>\n<\/ul>\n<h2>Vis\u00e3o geral do OpenFaaS<\/h2>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter wp-image-18988 size-full\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/texto-1.png\" alt=\"\" width=\"633\" height=\"342\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/texto-1.png 633w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/texto-1-300x162.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/texto-1-400x216.png 400w\" sizes=\"(max-width: 633px) 100vw, 633px\" \/><\/p>\n<h3>Function Watchdog<\/h3>\n<p>Voc\u00ea pode <strong>transformar qualquer imagem do Docker em uma fun\u00e7\u00e3o sem servidor<\/strong>, adicionando o <strong>Function Watchdog<\/strong> (um min\u00fasculo servidor HTTP Golang).<br \/>\nO Watchdog \u00e9 o <strong>ponto de entrada<\/strong> que permite que as solicita\u00e7\u00f5es HTTP sejam encaminhadas para o processo de destino via STDIN. A resposta \u00e9 enviada de volta ao requisitor escrevendo para STDOUT a partir do seu aplicativo.<\/p>\n<h3>API Gateway \/ UI Portal<\/h3>\n<p>O <strong>API Gateway fornece uma rota externa para suas fun\u00e7\u00f5es<\/strong> e coleta m\u00e9tricas do <strong>Native Cloud<\/strong> por meio do <strong>Prometheus<\/strong>.<br \/>\nSeu API gateway escalar\u00e1 as fun\u00e7\u00f5es de acordo com a demanda, alterando a contagem de r\u00e9plicas de servi\u00e7o no Docker Swarm ou na API do Kubernetes.<br \/>\nUma interface do usu\u00e1rio \u00e9 preparada para permitir que voc\u00ea invoque fun\u00e7\u00f5es em seu navegador e crie novas, conforme necess\u00e1rio.<\/p>\n<h3>Prometheus \/ Grafana<\/h3>\n<p>O prometheus \u00e9 utilizado para <strong>monitorar os servi\u00e7os<\/strong>, mostrando o <strong>dimensionamento autom\u00e1tico ao vivo em a\u00e7\u00e3o<\/strong>. Exemplo de um painel Grafana vinculado ao OpenFaaS:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-18989 size-large\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image2-780x390.png\" alt=\"\" width=\"780\" height=\"390\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image2-780x390.png 780w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image2-300x150.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image2-768x384.png 768w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image2-1024x512.png 1024w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image2-400x200.png 400w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image2-1320x660.png 1320w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image2.png 1999w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/p>\n<h3>CLI<\/h3>\n<p><span style=\"font-weight: 400;\">Qualquer container ou processo em um container Docker pode ser uma <strong>fun\u00e7\u00e3o sem servidor no FaaS<\/strong>. Usando a FaaS CLI, voc\u00ea pode implantar suas fun\u00e7\u00f5es ou criar rapidamente novas fun\u00e7\u00f5es a partir de modelos como o Node.js, Python ou PHP.<\/span><\/p>\n<h2>Configurando o OpenFaaS<\/h2>\n<p><span style=\"font-weight: 400;\">Supondo que voc\u00ea <strong>j\u00e1 tenha o Docker instalado<\/strong>, a primeira coisa que voc\u00ea precisa fazer \u00e9 inicializar o <strong>Docker Swarm<\/strong> e implantar a stack do OpenFaaS.<\/span><\/p>\n<pre class=\"\">docker swarm init --advertise-addr $(hostname -i)\n<\/pre>\n<p><span style=\"font-weight: 400;\">Mude para uma pasta de trabalho adequada e <strong>instale a stack do OpenFaaS<\/strong> clonando o reposit\u00f3rio do github e executando o script de implementa\u00e7\u00e3o.<\/span><\/p>\n<pre class=\"\">git clone https:\/\/github.com\/openfaas\/faas &amp;&amp; \\\n  cd faas &amp;&amp; \\\n  .\/deploy_stack.sh\n<\/pre>\n<p><span style=\"font-weight: 400;\">Neste momento \u00e9 gerado um <strong>username e password<\/strong> para acesso a UI e CLI do OpenFaaS, <strong>guarde estes dados<\/strong>.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Teste se a stack est\u00e1 funcionando invocando a fun\u00e7\u00e3o de exemplo <strong>echoit<\/strong> que faz echo de todos os dados de entrada enviados.<\/span><\/p>\n<pre>curl 127.0.0.1:8080\/function\/func_echoit -d 'hello world'\n<\/pre>\n<p><span style=\"font-weight: 400;\">Agora que o <strong>OpenFaaS est\u00e1 funcionando<\/strong>, voc\u00ea precisa<strong> instalar a estrutura cli do OpenFaaS (faas-cli)<\/strong> que permite construir, implementar e invocar suas pr\u00f3prias fun\u00e7\u00f5es facilmente a partir da linha de comando.<\/span><\/p>\n<pre class=\"\">curl -sL https:\/\/cli.openfaas.com | sudo sh\n<\/pre>\n<p><span style=\"font-weight: 400;\">Em seguida,<strong> instale o modelo PHP do OpenFaaS<\/strong>:<\/span><\/p>\n<pre>faas-cli template pull https:\/\/github.com\/itscaro\/openfaas-template-php\n<\/pre>\n<p><span style=\"font-weight: 400;\">Agora vamos criar uma nova fun\u00e7\u00e3o e dizer qual linguagem usar.<\/span><\/p>\n<h2>Construindo e implementando uma fun\u00e7\u00e3o PHP no OpenFaaS<\/h2>\n<p>Uma vez instalado o template, podemos test\u00e1-lo<strong> criando nossa primeira fun\u00e7\u00e3o PHP<\/strong>.<\/p>\n<p>A sintaxe da linha de comando do OpenFaaS para criar uma nova fun\u00e7\u00e3o \u00e9 a <strong>faas-cli new functionname \u2013lang languagename.<\/strong><\/p>\n<p>O template PHP usa o nome da linguagem php para fun\u00e7\u00f5es <strong>PHP7,<\/strong> e <strong>php5 para fun\u00e7\u00f5es PHP5<\/strong>. Vamos criar uma fun\u00e7\u00e3o PHP7 chamada func-ping-php usando o c\u00f3digo do template.<\/p>\n<pre>faas-cli new func-ping-php --lang php\n<\/pre>\n<p>Voc\u00ea observar\u00e1 um novo arquivo<strong> func-ping-php.yml<\/strong> e a <strong>pasta da fun\u00e7\u00e3o ser\u00e1 criada<\/strong>.<br \/>\nDentro de <strong>.\/func-ping-php<\/strong> h\u00e1 um diret\u00f3rio src que cont\u00e9m uma classe <strong>Handler.php<\/strong>. Abra isso e voc\u00ea ver\u00e1:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-18992 size-large\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image1-780x414.png\" alt=\"\" width=\"780\" height=\"414\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image1-780x414.png 780w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image1-300x159.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image1-768x408.png 768w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image1-1024x544.png 1024w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image1-400x212.png 400w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image1.png 1032w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/p>\n<p>Ent\u00e3o, por padr\u00e3o, ela apenas retorna os dados que voc\u00ea envia para ele.<br \/>\nAgora temos a configura\u00e7\u00e3o do projeto, podemos constru\u00ed-lo!<\/p>\n<h3>Construindo nossa fun\u00e7\u00e3o<\/h3>\n<p>Para construir uma fun\u00e7\u00e3o, usaremos novamente o faas-cli:<\/p>\n<pre class=\"\">faas-cli build -f .\/func-ping-php.yml\n<\/pre>\n<p>Isso criar\u00e1 o container docker que executar\u00e1 nossa fun\u00e7\u00e3o.<br \/>\nUma vez que \u00e9 constru\u00eddo, podemos implant\u00e1-lo!<\/p>\n<h3>Implantando nossa fun\u00e7\u00e3o<\/h3>\n<pre>faas-cli deploy -f .\/func-ping-php.yml\n<\/pre>\n<p>Depois de executar esta fun\u00e7\u00e3o, voc\u00ea dever\u00e1 ver:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-18998 size-large\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image5-780x299.png\" alt=\"\" width=\"780\" height=\"299\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image5-780x299.png 780w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image5-300x115.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image5-768x295.png 768w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image5-1024x393.png 1024w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image5-400x153.png 400w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image5.png 1032w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/p>\n<p>Isso nos diz que est\u00e1 tudo bem, assim como a URL com a qual podemos invocar a fun\u00e7\u00e3o.<\/p>\n<h3>Executando nossa fun\u00e7\u00e3o<\/h3>\n<p>Agora, podemos acessar nossa fun\u00e7\u00e3o enviando uma solicita\u00e7\u00e3o POST para o URL especificada:<\/p>\n<pre>curl -XPOST http:\/\/127.0.0.1:8080\/function\/func-ping-php\n<\/pre>\n<p>No entanto, n\u00e3o veremos nada, pois a fun\u00e7\u00e3o apenas retorna o que voc\u00ea envia para ela, e n\u00f3s n\u00e3o enviamos nada para ela!<\/p>\n<p>Agora, se enviarmos dados para ele, devemos ter os dados retornados. Ent\u00e3o executamos:<\/p>\n<pre>curl -XPOST -d \"ol\u00e1 blog\" http:\/\/127.0.0.1:8080\/function\/func-ping-php\n<\/pre>\n<p>Nos dar\u00e1 uma sa\u00edda:<br \/>\n<em>ol\u00e1 blog<\/em><\/p>\n<p>Agora, vamos atualizar nossa fun\u00e7\u00e3o para responder com o timestamp atual, j\u00e1 que \u00e9 uma fun\u00e7\u00e3o &#8220;ping&#8221;.<\/p>\n<h3>Atualizando nossa fun\u00e7\u00e3o<\/h3>\n<p>Vamos atualizar nossa fun\u00e7\u00e3o para retornar algum json, ent\u00e3o, de volta em <strong>.\/func-ping-php\/src\/Handler.php<\/strong>, vamos alter\u00e1-lo para:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-18999 size-large\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image2-1-780x414.png\" alt=\"\" width=\"780\" height=\"414\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image2-1-780x414.png 780w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image2-1-300x159.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image2-1-768x408.png 768w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image2-1-1024x544.png 1024w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image2-1-400x212.png 400w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/image2-1.png 1032w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/p>\n<p>Podemos verificar executando:<\/p>\n<pre>curl -XPOST -H \"Content-Type: application\/json\" http:\/\/127.0.0.1:8080\/function\/func-ping-php --head\n<\/pre>\n<p>O que nos mostrar\u00e1 que a resposta tamb\u00e9m retorna o <strong>application\/json<\/strong>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-19000 size-large\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/8-1-780x328.png\" alt=\"\" width=\"780\" height=\"328\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/8-1-780x328.png 780w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/8-1-300x126.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/8-1-768x323.png 768w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/8-1-1024x431.png 1024w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/8-1-400x168.png 400w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/8-1.png 1032w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/p>\n<p>Agora ent\u00e3o vamos reconstruir nossa fun\u00e7\u00e3o e reimplanta-l\u00e1 de acordo com as etapas acima:<\/p>\n<h4>Construir<\/h4>\n<pre>faas-cli build -f .\/func-ping-php.yml\n<\/pre>\n<h4>Implantar<\/h4>\n<pre>faas-cli deploy -f .\/func-ping-php.yml\n<\/pre>\n<p><span style=\"font-weight: 400;\">Agora, se executarmos nossa fun\u00e7\u00e3o, veremos que recuperamos o JSON especificado:<\/span><\/p>\n<pre class=\"\">curl -XPOST http:\/\/127.0.0.1:8080\/function\/func-ping-php\n\n{\"pong\": 1532176701}<\/pre>\n<h2>Conclus\u00e3o<\/h2>\n<p>Neste artigo\/tutorial vimos que \u00e9 simples <strong>criarmos fun\u00e7\u00f5es serverless<\/strong> utilizando o projeto open source <strong>OpenFaaS<\/strong>, uma alternativa aos principais players do mercado que fornecem este servi\u00e7o.<\/p>\n<p>Para isso n\u00f3s usamos basicamente a ferramenta <strong>CLI do OpenFaaS (faas-cli)<\/strong>, mas voc\u00ea tamb\u00e9m pode utilizar a interface do usu\u00e1rio, que facilita e permite que invoque fun\u00e7\u00f5es em seu navegador e crie novas, conforme necess\u00e1rio.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-18994 size-large\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/9-780x501.png\" alt=\"\" width=\"780\" height=\"501\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/9-780x501.png 780w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/9-300x193.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/9-768x493.png 768w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/9-1024x657.png 1024w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/9-400x257.png 400w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/09\/9.png 1055w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/p>\n<p>E voc\u00ea, j\u00e1 conhecia o projeto OpenFaaS e qual a sua opini\u00e3o sobre Serverless, j\u00e1 est\u00e1 utilizando?<\/p>\n<p>Quer saber mais sobre o assunto? N\u00e3o perca o <strong><a href=\"https:\/\/www.conexaokinghost.com.br\/?utm_source=lab&amp;utm_medium=post&amp;utm_term=&amp;utm_content=serverless-faas&amp;utm_campaign=content-marketing\" target=\"_blank\" rel=\"noopener\">Conex\u00e3o KingHost<\/a><\/strong> nos dias 17 e 18 de outubro, <strong>vai rolar uma palestra toda dedicada \u00e0 serverless e faas<\/strong>. As inscri\u00e7\u00f5es j\u00e1 est\u00e3o abertas, basta clicar no banner abaixo!<\/p>\n<p><a href=\"https:\/\/www.conexaokinghost.com.br\/?utm_source=lab&amp;utm_medium=post&amp;utm_term=&amp;utm_content=serverless-faas&amp;utm_campaign=content-marketing\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-18917 size-full\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/08\/conexaokinghostadsdisplay-970x90.png\" alt=\"conex\u00e3o kinghost\" width=\"970\" height=\"90\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/08\/conexaokinghostadsdisplay-970x90.png 970w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/08\/conexaokinghostadsdisplay-970x90-300x28.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/08\/conexaokinghostadsdisplay-970x90-768x71.png 768w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/08\/conexaokinghostadsdisplay-970x90-780x72.png 780w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2018\/08\/conexaokinghostadsdisplay-970x90-400x37.png 400w\" sizes=\"(max-width: 970px) 100vw, 970px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>As arquiteturas sem servidor (serverless) s\u00e3o projetos de aplica\u00e7\u00f5es que incorporam servi\u00e7os \u201cBackend as a Service\u201d (BaaS) de terceiros e\/ou que incluem execu\u00e7\u00e3o de c\u00f3digo personalizado em cont\u00eaineres ef\u00eameros gerenciados em uma plataforma \u201cFunctions as a Service\u201d (FaaS). Ao usar essas ideias e outras relacionadas, como aplica\u00e7\u00f5es single-page, estas arquiteturas removem grande parte da necessidade [&hellip;]<\/p>\n","protected":false},"author":285,"featured_media":19008,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[156],"tags":[1374],"class_list":["post-18983","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriais","tag-php"],"_links":{"self":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/18983","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/users\/285"}],"replies":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/comments?post=18983"}],"version-history":[{"count":15,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/18983\/revisions"}],"predecessor-version":[{"id":38346,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/18983\/revisions\/38346"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media\/19008"}],"wp:attachment":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media?parent=18983"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/categories?post=18983"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/tags?post=18983"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}