© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Renato Barbosa – Enterprise Solutions Architect
Junho - 2016
Arquitetura Serverless e AWS
Lambda
Serverless e AWS Lambda
Deixe de se preocupar com:
• Servidores
• Dimencionamento
• Deployments
• Escalabilidade
• Tolerância a Falhas
• S.O e Updates
• Metricas e Log
E você pode facilmente:
• Executar código em
paralelo
• Trazer seu código e
bibliotecas nativas
• Criar backend, Ações
através de eventos e
sistemas de processamento
• Pagar apenas pelo
necessário
AWS Lambda – Benefícios
ESCALÁVEL POR EVENTOSSERVERLESS BILLING EM
MILISEGUNDOS
AWS Lambda – Integração
Amazon
S3
Amazon
DynamoDB
Amazon
Kinesis
AWS
CloudTrail
Amazon
CloudWatch
Logs
AWS
CloudFormation
Amazon
SNS
Amazon
SWF
Amazon
SES
Amazon
API Gateway
Amazon
Cognito
AWS Lambda – Histórico
re:Invent 2014
Preview Launch
April 2015
GA
Summer 2015 re:Invent 2015
• Node.js
• Event handlers
• CORS
• Mobile
Backends
• Sync calls
• Resource
policies
• Java
• Amazon S3
uploads
• Blueprints
• 1.5 GB
• Tokyo region
• Alexa Skills
• Pyhton
• Controle de
Versão
• Agendador
• Funções de até
5 min
AWS Lambda – Desafio do Demo
• Criar uma arquitetura e execução serverless para:
• Armezenar vídeos de Upload dos usuários
• Pós Upload converter vídeos e armazenar-los
• Pós conversão armazenar em um banco de dados
Metadados do vídeo
• Disponibilizar videos em uma estrutura de CDN Serverless
• Enviar notificação do novo vídeo aos usuários
Solução necessita ser SERVERLESS!
Arquitetura
Arquitetura – Serveless Storage
Arquitetura – Serverless Transcode
Arquitetura - Serverless Database e Notify
Arquitetura – Serveless CDN
AWS Lambda – Desenvolvendo
• Guia a Tira colo:
• http://boto3.readthedocs.io/en/latest/index.html
• Desenhar a solução e trabalhar nas APIs
• Inicio da solução….
1) Lambda pós Upload
##### Instanciando os servicos
s3 = boto3.client('s3')
etranscoder = boto3.client('elastictranscoder')
##### Id da Pipelinepipeline
Id = ('1463433351875-xzcffu')
##### Id do Preset preset
Id = ('1351620000001-000010')
def lambda_handler(event, context):
#print("Received event: " + json.dumps(event, indent=2))
# Get the object from the event and show its content type
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.unquote_plus(event['Records'][0]['s3']['object']['key']).decode('utf8')
try:
##### Obtendo resposta do Evento
response = s3.get_object(Bucket=bucket, Key=key)
1) Lambda pós Upload
##### Realizando o Transcoding do Video
transcoder = etranscoder.create_job(
PipelineId = pipelineId,
Input={
'Key': key
},
Output={
'Key': key,
'PresetId': presetId
}
)
2) Lambda pós Transcode
##### Instanciando os servicos
s3 = boto3.client('s3')
dynamodb = boto3.resource('dynamodb')
sns = boto3.client('sns')
##### Acessando Tabela do DynamoDB
table = dynamodb.Table('Videos')
##### EndPoint do CloudFront
cloudfront = ('http://d397nnvlvhwg5r.cloudfront.net/')
##### ARN do Topic do SNStopic
ARN = ('arn:aws:sns:us-east-1:939664253159:videos')
2) Lambda pós Transcode
def lambda_handler(event, context):
....
##### Inserindo no DynamoDB os dados do acesso ao video e Status.
put_item_dynamo = table.put_item(
Item = {
'Nome': key,
'Info': response['ContentType'],
'Status': '0',
'Link': cloudfront + key
}
)
##### Enviando alerta de video disponivel.
snsPublish = sns.publish(
TopicArn = topicARN,
Message = 'Novo video disponivel. Para acessar o video acessar o Link: '+ cloudfront +
key,
Subject = 'Demo Summit! Tem novidade ai.',
MessageStructure = 'Raw',
)
Demo
#LambdaVoceTambem
Remember to complete
your evaluations!
Obrigado

Arquitetura Serverless e AWS Lambda - Demo Session

  • 1.
    © 2016, AmazonWeb Services, Inc. or its Affiliates. All rights reserved. Renato Barbosa – Enterprise Solutions Architect Junho - 2016 Arquitetura Serverless e AWS Lambda
  • 2.
    Serverless e AWSLambda Deixe de se preocupar com: • Servidores • Dimencionamento • Deployments • Escalabilidade • Tolerância a Falhas • S.O e Updates • Metricas e Log E você pode facilmente: • Executar código em paralelo • Trazer seu código e bibliotecas nativas • Criar backend, Ações através de eventos e sistemas de processamento • Pagar apenas pelo necessário
  • 3.
    AWS Lambda –Benefícios ESCALÁVEL POR EVENTOSSERVERLESS BILLING EM MILISEGUNDOS
  • 4.
    AWS Lambda –Integração Amazon S3 Amazon DynamoDB Amazon Kinesis AWS CloudTrail Amazon CloudWatch Logs AWS CloudFormation Amazon SNS Amazon SWF Amazon SES Amazon API Gateway Amazon Cognito
  • 5.
    AWS Lambda –Histórico re:Invent 2014 Preview Launch April 2015 GA Summer 2015 re:Invent 2015 • Node.js • Event handlers • CORS • Mobile Backends • Sync calls • Resource policies • Java • Amazon S3 uploads • Blueprints • 1.5 GB • Tokyo region • Alexa Skills • Pyhton • Controle de Versão • Agendador • Funções de até 5 min
  • 6.
    AWS Lambda –Desafio do Demo • Criar uma arquitetura e execução serverless para: • Armezenar vídeos de Upload dos usuários • Pós Upload converter vídeos e armazenar-los • Pós conversão armazenar em um banco de dados Metadados do vídeo • Disponibilizar videos em uma estrutura de CDN Serverless • Enviar notificação do novo vídeo aos usuários Solução necessita ser SERVERLESS!
  • 7.
  • 8.
  • 9.
  • 10.
    Arquitetura - ServerlessDatabase e Notify
  • 11.
  • 12.
    AWS Lambda –Desenvolvendo • Guia a Tira colo: • http://boto3.readthedocs.io/en/latest/index.html • Desenhar a solução e trabalhar nas APIs • Inicio da solução….
  • 13.
    1) Lambda pósUpload ##### Instanciando os servicos s3 = boto3.client('s3') etranscoder = boto3.client('elastictranscoder') ##### Id da Pipelinepipeline Id = ('1463433351875-xzcffu') ##### Id do Preset preset Id = ('1351620000001-000010') def lambda_handler(event, context): #print("Received event: " + json.dumps(event, indent=2)) # Get the object from the event and show its content type bucket = event['Records'][0]['s3']['bucket']['name'] key = urllib.unquote_plus(event['Records'][0]['s3']['object']['key']).decode('utf8') try: ##### Obtendo resposta do Evento response = s3.get_object(Bucket=bucket, Key=key)
  • 14.
    1) Lambda pósUpload ##### Realizando o Transcoding do Video transcoder = etranscoder.create_job( PipelineId = pipelineId, Input={ 'Key': key }, Output={ 'Key': key, 'PresetId': presetId } )
  • 15.
    2) Lambda pósTranscode ##### Instanciando os servicos s3 = boto3.client('s3') dynamodb = boto3.resource('dynamodb') sns = boto3.client('sns') ##### Acessando Tabela do DynamoDB table = dynamodb.Table('Videos') ##### EndPoint do CloudFront cloudfront = ('http://d397nnvlvhwg5r.cloudfront.net/') ##### ARN do Topic do SNStopic ARN = ('arn:aws:sns:us-east-1:939664253159:videos')
  • 16.
    2) Lambda pósTranscode def lambda_handler(event, context): .... ##### Inserindo no DynamoDB os dados do acesso ao video e Status. put_item_dynamo = table.put_item( Item = { 'Nome': key, 'Info': response['ContentType'], 'Status': '0', 'Link': cloudfront + key } ) ##### Enviando alerta de video disponivel. snsPublish = sns.publish( TopicArn = topicARN, Message = 'Novo video disponivel. Para acessar o video acessar o Link: '+ cloudfront + key, Subject = 'Demo Summit! Tem novidade ai.', MessageStructure = 'Raw', )
  • 17.
  • 18.
  • 19.