arquitetura serverless e aws lambda - demo session
Post on 20-Jan-2017
606 Views
Preview:
TRANSCRIPT
© 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 2014Preview Launch
April 2015GA
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
top related