O documento discute arquiteturas serverless usando AWS Lambda. Ele descreve como Lambda permite executar código sem se preocupar com servidores, dimensionamento, deployments ou outros detalhes de infraestrutura. Também apresenta uma arquitetura de exemplo para um sistema de upload, transcodificação e armazenamento de vídeos de forma serverless.
2. 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
3. AWS Lambda – Benefícios
ESCALÁVEL POR EVENTOSSERVERLESS BILLING EM
MILISEGUNDOS
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!
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ó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)
14. 1) Lambda pós Upload
##### Realizando o Transcoding do Video
transcoder = etranscoder.create_job(
PipelineId = pipelineId,
Input={
'Key': key
},
Output={
'Key': key,
'PresetId': presetId
}
)
15. 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')
16. 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',
)