SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
Tornando as coisas maisTornando as coisas mais
simples com Azuresimples com Azure
Functions e Node.JSFunctions e Node.JS
Trilha - Node.JS
Matheus Donizete
front-end Developer
@MathDonizete
Amante de futebol
Corinthiano
JavaScript developer
Vim do Front
Um Santista que mora em
Curitiba
Aplicações em Tempo Real
IoT
Organizador #CapiConf
#AlwaysBetOnJavaScript
matheusdonizete.github.io
AgendaAgenda
1. Conceitos
1. Introdução (TL;DR)
2. Arquitetura Serverless
3. Serviços como um todo
4. Paradigma
5. Por que Node.JS?
2. Azure Functions
3. VS Code Tips
Introdução (TL;DR)Introdução (TL;DR)
Introdução Introdução 
Máquina Física
Virtualização
Cloud Computing
Container
Vamos conversar?Vamos conversar?
Motivação:Motivação:
Deixar o desenvolvedor se preocupar com aquilo que
realmente interessa, a aplicação
 
ServerlessServerless
Serverless DefiniçõesServerless Definições
Duas Caracterizações:
1. Uma SPA e um BaaS (Backend as a Service) caracterizava
uma arquitetura serverless, onde a lógica não é
processada no backend, consumindo third-party
resources (Auth0 por exemplo);
2. FaaS, a lógica continua sendo feita pelo desenvolvedor,
porém é baseada em eventos e Stateless.
ServerlessServerless
nem tudo são floresnem tudo são flores
Vantagens:
Escalabilidade
Baixo Custo
Tempo de
desenvolvimento
Foco no usuário
Baixa latência
Desvantagens:
Problemas de Gerência
Problemas de aplicações
multitenancy
Considerações de segurança
Repetição de lógica
Testes
Serverless - FaaSServerless - FaaS
Em outras palavras, oEm outras palavras, o
Backend para o FrontendBackend para o Frontend
Serverless - Um diagramaServerless - Um diagrama
ServerlessServerless
Você deixa de se preocuparVocê deixa de se preocupar
com a infra e passa a secom a infra e passa a se
preocupar compreocupar com
configuração.configuração.
Por que Node.JS?Por que Node.JS?
Por que Node.JS?Por que Node.JS?
Porque eu posso!!Porque eu posso!!
E porque entendo oE porque entendo o
que tô fazendoque tô fazendo
Azure FunctionsAzure Functions
Functions
Integração com Serviços externos
Executar Tarefas
Baseado em Eventos
CI
Pague só o que usar
Segurança
Suporte a diversas Linguagens: C#, JavaScript, Java,
PHP, Bash, Batch e mais umas aí...
ComportamentoComportamento
HTTPTrigger 
TimerTrigger
GitHub webhook
Generic webhook
CosmosDBTrigger 
BlobTrigger 
QueueTrigger
EventHubTrigger
ServiceBusQueueTrigger
ServiceBusTopicTrigger
Tipos de FunçõesTipos de Funções
Exemplo de Arquitetura Web
Com Chatbots (modinha)
Mais um Diagrama
PricingPricing
E agora: ProxiesE agora: Proxies
Recurso utilizado para alterar o funcionamento das sua
funções, podendo sobrescrever tanto o Request quanto
o Response de uma URI
Configurado utilizando o proxies.json
ProxiesProxies
Configurado utilizando o proxies.json
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {
"add-name-to-query": {
"matchCondition": {
"route": "/"
},
"backendUri": "https://yourbackend.azurewebsites.net/api/HttpTrigger",
"requestOverrides": {
"backend.request.querystring.name": "{name}"
}
}
}
}
Show me the CodeShow me the Code
Show me the Code 1Show me the Code 1
//O simples do simples / auto gerado
module.exports = function (context, req) {
if (req.query.name || (req.body && req.body.name)) {
context.res = {
// status: 200, /* Defaults to 200 */
body: "Hello " + (req.query.name || req.body.name)
};
}
else {
context.res = {
status: 400,
body: "Deu ruim"
};
}
context.done();
};
O Objeto ContextO Objeto Context
Ele éEle é O CARAO CARA da nossada nossa
aplicaçãoaplicação
É responsável por gerenciar os dados e os
"estados" da nossa função
Context - ReferencesContext - References
context.bindings - propriedade
context.done - método
context.log - método
Show me the Code 2Show me the Code 2
w/ node_modulesw/ node_modules
const { createHandler } = require('azure-function-express');
const { data } = require('./dictionary');
const express = require('express');
const app = express();
app.get('/api/:foo/:bar', (req, res) => {
res.json({
foo: req.params.foo,
bar: req.params.bar
});
});
app.get('/api/list', (req, res) => {
res.json({
status: true,
data
});
});
module.exports = createHandler(app);
Show me the Code 2Show me the Code 2
w/ node_modulesw/ node_modules
// function.json
{
"bindings": [{
"authLevel" : "anonymous",
"type" : "httpTrigger",
"direction" : "in",
"name" : "req",
"route" : "{*segments}"
}, {
"type" : "http",
"direction" : "out",
"name" : "res"
}]
}
Show me the Code 2Show me the Code 2
w/ node_modules - Steps:w/ node_modules - Steps:
1. Acessar:
https://<function_app_name>.scm.azurewebsites.net
2. Debug Console > CMD.
3. Acessar: D:homesitewwwroot
4. npm install
Show me the Code 2Show me the Code 2
w/ node_modules - Steps:w/ node_modules - Steps:
1. Acessar:
https://<function_app_name>.scm.azurewebsites.net
2. Debug Console > CMD.
3. Acessar: D:homesitewwwroot
4. npm install
MENTIRA
MENTIRA
ExemplosExemplos
VS CODEVS CODE
The Best Text Editor in the World
First of AllFirst of All
Functions v2:
npm i ­g azure­functions­core­tools ­­
unsafe­perm true
Functions v1:
npm i ­g azure­functions­core­tools@1
VS CODE - ExtensõesVS CODE - Extensões
Azure FunctionsAzure Functions
Azure Cosmos DBAzure Cosmos DB
Azure AccountAzure Account
De brinde: VS Live ShareDe brinde: VS Live Share
VS CODE TIPSVS CODE TIPS
ReferênciasReferências
https://www.martinfowler.com/articles/serverless.html
https://docs.microsoft.com/en-us/azure/cosmos-
db/serverless-computing-database
https://docs.microsoft.com/en-us/azure/azure-
functions/functions-overview
https://blogs.msdn.microsoft.com/azuredev/2017/03/14/usin
g-azure-functions-as-a-lightweight-api-gateway/
Obrigado pelaObrigado pela
atenção!!atenção!!@MathDonizete
GitHub:
MatheusDonizete

Mais conteúdo relacionado

Mais procurados

Mecanismo de busca PHP + MongoDB
Mecanismo de busca PHP + MongoDBMecanismo de busca PHP + MongoDB
Mecanismo de busca PHP + MongoDBLuiz Duarte
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsSuissa
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDBLuiz Duarte
 
Mecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDBMecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDBLuiz Duarte
 
Introdução ao MongoDB II
Introdução ao MongoDB IIIntrodução ao MongoDB II
Introdução ao MongoDB IILuiz Duarte
 
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno RochaiMasters
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Luis Gustavo Almeida
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Luis Gustavo Almeida
 

Mais procurados (11)

Mecanismo de busca PHP + MongoDB
Mecanismo de busca PHP + MongoDBMecanismo de busca PHP + MongoDB
Mecanismo de busca PHP + MongoDB
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webapps
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Mecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDBMecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDB
 
Tracking.js
Tracking.jsTracking.js
Tracking.js
 
Introdução ao MongoDB II
Introdução ao MongoDB IIIntrodução ao MongoDB II
Introdução ao MongoDB II
 
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP
 
Backend
Backend Backend
Backend
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
Php curl - Coleta de dados na web
Php curl - Coleta de dados na webPhp curl - Coleta de dados na web
Php curl - Coleta de dados na web
 

Semelhante a Tornando as coisas mais simples com Azure Functions e Node.JS

IoTizando com JavaScript
IoTizando com JavaScriptIoTizando com JavaScript
IoTizando com JavaScriptHeider Lopes
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
PyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonPyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonBruno Rocha
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosHenrique Gogó
 
Workshop react + adonis.js
Workshop react + adonis.jsWorkshop react + adonis.js
Workshop react + adonis.jsDenis Velrino
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
Android chat app com Node.js
Android chat app com Node.jsAndroid chat app com Node.js
Android chat app com Node.jsLuiz Duarte
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EERodrigo Cândido da Silva
 
Monitoramento em tempo real (DEVDAY2015)
Monitoramento em tempo real (DEVDAY2015)Monitoramento em tempo real (DEVDAY2015)
Monitoramento em tempo real (DEVDAY2015)Marcus Lacerda
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?Rafael Benevides
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarFilipe Falcão
 

Semelhante a Tornando as coisas mais simples com Azure Functions e Node.JS (20)

IoTizando com JavaScript
IoTizando com JavaScriptIoTizando com JavaScript
IoTizando com JavaScript
 
API Apontador
API ApontadorAPI Apontador
API Apontador
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Explorando a API Rest Jira Cloud
Explorando a API Rest Jira CloudExplorando a API Rest Jira Cloud
Explorando a API Rest Jira Cloud
 
PyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonPyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com Python
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectados
 
PHP no Google AppEngine
PHP no Google AppEnginePHP no Google AppEngine
PHP no Google AppEngine
 
Workshop react + adonis.js
Workshop react + adonis.jsWorkshop react + adonis.js
Workshop react + adonis.js
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Android chat app com Node.js
Android chat app com Node.jsAndroid chat app com Node.js
Android chat app com Node.js
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
 
Monitoramento em tempo real (DEVDAY2015)
Monitoramento em tempo real (DEVDAY2015)Monitoramento em tempo real (DEVDAY2015)
Monitoramento em tempo real (DEVDAY2015)
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Node.js: serious business
Node.js: serious businessNode.js: serious business
Node.js: serious business
 
Python 08
Python 08Python 08
Python 08
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
 

Tornando as coisas mais simples com Azure Functions e Node.JS