Header Ads

Como usar o AWS Object Lambda para transformar objetos S3 mediante solicitação

Object Lambda permite que você coloque uma função Lambda na frente de objetos S3, permitindo que eles sejam transformados a pedido por seu próprio código personalizado. Como ele é executado automaticamente no Lambda, você não precisa se preocupar em executar sua própria camada de proxy.

O que é Object Lambda?

O objeto Lambda basicamente ocupa o lugar de uma API na frente do S3. Anteriormente, você teria que configurar uma camada de proxy em sua própria infraestrutura para lidar com a transformação de objetos mediante solicitação. Isso adiciona complexidade, então a AWS adicionou uma solução melhor.

RELACIONADO: O que são funções Lambda e como usá-las?

Em vez de acessar os objetos diretamente, você &’ o fará por meio de um Object Lambda Access Point. Quando você faz uma solicitação GET para um arquivo em um intervalo S3, a função Lambda para esse ponto de acesso será chamada automaticamente, terá permissão para acessar o objeto original e retornará um objeto transformado de volta ao aplicativo.

Os usos para isso podem ser básicos, como redigir informações ou converter JSON em XML, mas como é seu próprio código, você pode fazer o que quiser. Você pode, por exemplo, executar uma pesquisa de banco de dados e retornar um objeto transformado com novos dados ou fazer solicitações a APIs externas.

Você pode ter vários pontos de acesso por intervalo, cada um deles representando várias “ visualizações ” dos dados subjacentes. Para usar diferentes pontos de acesso, você não precisará atualizar nenhum código de cliente. Basta alterar o nome do intervalo para o ARN do Object Lambda Access Point.

 s3. get_object (Bucket = 'arn: aws: s3-object-lambda: us-east-1: 123412341234: accesspoint / myolap', Key = 's3. txt') 

Você também não precisa acessar o objeto original pelo nome exato. Por exemplo, seu aplicativo poderia solicitar picture_1920x1080. jpg, que localizaria picture. jpg e redimensionaria para as dimensões fornecidas. Nesse caso, a função Lambda precisaria de permissões extras para acessar o conteúdo do intervalo.

Claro, você precisará pagar por todo o tempo gasto executando funções do Lambda. Se você estiver executando muitas funções por meio de um ponto de acesso voltado para o usuário, isso pode começar a aumentar. Se suas transformações são estáticas, você pode querer considerar o armazenamento em cache dos objetos em um bucket S3 separado. Por exemplo, se você tem uma função que aplica filtros / compactação a uma imagem, pode querer armazenar em cache os resultados em vez de reconstruí-los a cada solicitação. No entanto, para coisas que dependem de um estado externo, isso não será possível.

RELACIONADO: Como fazer backup de um intervalo S3 (e por que você deseja)

Usando Object Lambda

Vá para o S3 Management Console para começar. Cada ponto de acesso Object Lambda precisa de um ponto de acesso regular por trás dele. Você precisará criá-lo a partir de Pontos de acesso > Crie na barra lateral.

Insira um nome e selecione um intervalo e certifique-se de selecionar “ Internet ” a menos que esse intervalo seja limitado a um único VPC. Depois de criado, copie o ARN do ponto de acesso.

Crie um ponto de acesso Object Lambda:

Dê a ele um nome e cole-o no ARN do ponto de acesso, e o console deve exibir o nome do intervalo subjacente.

Neste ponto, você precisará selecionar uma função Lambda. Se você tiver um preparado, pode inserir o ARN ou selecioná-lo na lista. Caso contrário, você precisará acessar o Lambda Management Console para criar um.

Neste ponto, o código é com você, embora a AWS forneça o exemplo a seguir, que pega o objeto original e o transforma em maiúsculas. Não importa qual linguagem você acabe usando, você &’ precisará pegar o contexto do evento, fazer uma solicitação ao S3 usando a URL, transformar o objeto e escrever a resposta usando a nova API WriteGetObjectResponse, retornando um código de status HTTP depois.

 importar solicitações de importação boto3 deflambda_handler (evento, contexto): print (event) object_get_context = event ["getObjectContext"] request_route = object_get_context ["outputRoute"] request_token = object_get_context ["outputToken"] s3_url = object_get_context [" inputS3Url "] # Obtém o objeto de S3 response = requests. get (s3_url) original_object = response. content. decode ('utf-8') # Transforma objeto transformado_object = original_object. upper () # Grava objeto de volta em S3 Object Lambda s3 = boto3. client ('s3') s3. write_get_object_response (Body = transform_object, RequestRoute = request_route, RequestToken = request_token) return {'status_code': 200} 

O objeto de evento que o Lambda recebe será semelhante a este:

 {"xAmzRequestId": "1a5ed718-5f53-471d-b6fe-5cf62d88d02a", "getObjectContext": {"inputS3Url": "https: // myap-123412341234 .s3-accesspoint. us-east-1. amazonaws. com / s3. txt? X-Amz-Security-Token = ... "," outputRoute ":" io-iad-cell001 "," outputToken ":". .. "}," configuration ": {" accessPointArn ":" arn: aws: s3-object-lambda: us-east-1: 123412341234: accesspoint / myolap "," supportedAccessPointArn ":" arn: aws: s3: us -east-1: 123412341234: accesspoint / myap "," payload ":" test "}," userRequest ": {" url ":" /s3. txt "," headers ": {" Host ":" myolap-123412341234 .s3-object-lambda. us-east-1. amazonaws. com "," Aceitar-Codificação ":" identidade "," X-Amz-Content-SHA256 ":" e3b0c44297fc1c149afbf4c8995fb92427ae41e4649b934ca495991b7852b855 ": usuário" digite ":" IAMUser "," principalId ":" ... "," arn ":" arn: aws: iam :: 123412341234: user / myuser "," accountId ":" 123412341234 "," accessKeyId ":". .. "}," protocolVersion ":" 1,00 "} 

Existem duas informações importantes aqui — a seção userRequest, que contém informações sobre a solicitação inicial, como URL e cabeçalhos HTTP, e a seção userIdentity, que pode ser usada para personalizar a resposta com base no usuário IAM.

RELACIONADO: AWS IAM Users Versus. Funções de IAM: qual você deve usar?

Nenhum comentário