Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

First implementation of serve_thumb.py #1

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

MatheusBuss
Copy link
Contributor

@MatheusBuss MatheusBuss commented Aug 30, 2022

closes #2

Create the first lambda function of this repository.

This function is responsible to serve the correct image for rich_link previews.

The function should:

  • Check if the correct image for the rich_link exists
  • If not resize and save the image
  • Serve the correct image

This function is to be triggered when the response is being from our server to a cloudfront distribution. The HTTPS response from the server is intercepted and modified to include the correct image.

@MatheusBuss MatheusBuss requested a review from lucca65 August 30, 2022 20:50
@MatheusBuss MatheusBuss self-assigned this Aug 30, 2022
@MatheusBuss MatheusBuss added the enhancement New feature or request label Sep 2, 2022
@lucca65
Copy link
Member

lucca65 commented Sep 5, 2022

Bro como tá isso aqui? resolveu a parada de lentidão?

@MatheusBuss
Copy link
Contributor Author

MatheusBuss commented Sep 8, 2022

@lucca65 continuei tentando implementar a função e fiquei recebendo um erro. Descobri que não é possível fazer o que estávamos tentando fazer com essa função. Pela documentação da AWS:

When you’re working with the HTTP response, Lambda@Edge does not expose the body that is returned by the origin server to the origin-response trigger. You can generate a static content body by setting it to the desired value, or remove the body inside the function by setting the value to be empty. If you don’t update the body field in your function, the original body returned by the origin server is returned back to viewer.

Ou seja, não conseguimos ter acesso ao body da resposta do servidor e não somos capazes de modificá-la. Então acho que pra essa funcionalidade vai ter que ser buscada uma outra solução.


Mas uma coisa que podemos aproveitar disso tudo é a distribuição de imagens pelo cloudfront, que parece estar funcionando certinho.

@lucca65
Copy link
Member

lucca65 commented Sep 8, 2022

Não devo estar entendendo alguma coisa, pois nosso objetivo não é modificar o body. É salvar versões menores das imagens para que possamos servi-las pelo nosso backend.

Se com o lambda conseguimos salvar imagens em formatos menores ou diferentes, isso basta. Resolvemos a outra parte do problema pedindo pela imagem apropriada lá no backend

@MatheusBuss
Copy link
Contributor Author

Então vai ter que ser uma implementação diferente dessa do python que estamos desenvolvendo. O problema atual é quando gerar essa segunda imagem. Essa implementação depende do backend pegar a imagem certa e quando ele envia a resposta HTTPS é que a função Lambda gera a imagem menor (se necessário) e substitui ela na resposta.

Pra adaptar podemos fazer o que falasse. Fazemos o backend sempre pedir as imagens de rich links pelo cloudfront ao invés do S3 e daí o Lambda se preocupa em garantir que a imagem existe. Seria necessário alterar o HTML que é servido pra substituir algo como "https://cambiatus-uploads.s3.amazonaws.com/cambiatus-uploads/foo" para "https://cambiatus-uploads.cloudfront.amazonaws.com/cambiatus-uploads/foo", o que não me parece um problema.

Outra opção é gerar essa segunda imagem quando é feito o upload da primeira. Daí pras imagens que já estão no bucket fazemos um script para gerar as thumbs. Acho que essa alternativa faria mais sentido se implementada direto no backend.

Quem sabe podemos adicionar um check no user-agent pela função Lambda também. Dessa maneira podemos tentar fazer a distribuição de todos os arquivos da Cambiatus pelo CloudFront, só seria necessário requisitar as imagens pelo cloudfront mesmo.

@lucca65
Copy link
Member

lucca65 commented Sep 8, 2022

Pra adaptar podemos fazer o que falasse. Fazemos o backend sempre pedir as imagens de rich links pelo cloudfront ao invés do S3 e daí o Lambda se preocupa em garantir que a imagem existe. Seria necessário alterar o HTML que é servido pra substituir algo como "https://cambiatus-uploads.s3.amazonaws.com/cambiatus-uploads/foo" para "https://cambiatus-uploads.cloudfront.amazonaws.com/cambiatus-uploads/foo", o que não me parece um problema.

+1 bro!

@lucca65
Copy link
Member

lucca65 commented Sep 8, 2022

Quem sabe podemos adicionar um check no user-agent pela função Lambda também. Dessa maneira podemos tentar fazer a distribuição de todos os arquivos da Cambiatus pelo CloudFront, só seria necessário requisitar as imagens pelo cloudfront mesmo.

Sobre isso, é uma feature interessante de backend, mas acho melhor a gente não estender mais as tarefas de Cambiatus por hora!

@lucca65 lucca65 removed their request for review September 12, 2022 15:01
@lucca65
Copy link
Member

lucca65 commented Sep 12, 2022

bro tirei meu review request pra parar com as notificações no slack, me add de novo quando for pertinente bro!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Padronizar e aprimorar a imagem utilizada pelo rich link preview
2 participants