Como posso usar os pacotes binários nativos da AMI do Amazon Linux 2 com o Lambda?

4 minuto de leitura
0

Quero criar uma função do AWS Lambda que contenha dependências de bibliotecas compartilhadas binárias e seja executada em uma imagem de machine da Amazon (AMI) do Amazon Linux 2. Existe uma maneira de usar os pacotes de software da AMI do Amazon Linux 2 sem recompilar o pacote?

Breve descrição

O Amazon Linux 2 AMI e o Amazon Linux AMI que são usados para runtimes do Lambda não oferecem suporte aos mesmos pacotes binários nativos.

Como solução alternativa, você pode primeiro criar uma imagem de contêiner do Lambda usando a interface de linha de comando (CLI) do Docker. Em seguida, use a imagem do contêiner para executar sua função do Lambda.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está usando a versão mais recente.

As instruções a seguir descrevem como instalar uma biblioteca curl em uma imagem do Docker (imagem de contêiner do Lambda). Em seguida, como usar a imagem para executar uma função do Lambda no Python versão 3.9. Para outras linguagens de codificação, adapte as etapas adequadamente.

1.    Se você ainda não fez isso, instale a CLI do Docker.

2.    Crie um diretório de projeto chamado lambda-project.

3.    Use um editor de texto para criar um Dockerfile no diretório lambda-project que inclui o seguinte exemplo de código:

FROM public.ecr.aws/lambda/python:3.9

# Copy function code
COPY lambda_function.py ${LAMBDA_TASK_ROOT}

# Install the binary packages using yum install
RUN yum install -y curl

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "lambda_function.lambda_handler" ]

4.    Use um editor de texto para criar um arquivo lambda_function.py no diretório lambda-project que inclui o seguinte exemplo de código:

import subprocess

def lambda_handler(event, context):
    my_output = subprocess.check_output(["curl","-X", "GET", "https://www.httpbin.org/get"], stderr=subprocess.STDOUT, shell=False)
    print(my_output.decode('utf8'))

Importante: Certifique-se de executar todos os comandos a seguir (etapas 5 a 10) no diretório lambda-project.

5.    Crie a imagem do contêiner do Lambda executando o seguinte comando docker build da CLI do Docker:

docker build -t hello-world

6.    Teste a configuração da imagem do contêiner iniciando a imagem do contêiner localmente. Para iniciar a imagem do contêiner localmente, execute o seguinte comando docker run da CLI do Docker:

docker run -p 9000:8080 hello-world
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

7.    Autentique o Docker em seu registro do Amazon Elastic Container Registry (Amazon ECR) executando o seguinte comando get-login-password da AWS CLI:

Importante: Substitua us-east-1 pela sua região da AWS. Substitua 123456789012 pela ID da sua conta da AWS.

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com

Para mais informações, consulte Using an authorization token in the Amazon ECR User Guide (Usar um token de autorização) no Guia do usuário do Amazon ECR.

8.    Crie um repositório do Amazon ECR executando o seguinte comando create-repository da AWS CLI:

Importante: Substitua hello-world pelo nome do seu repositório do Amazon ECR.

aws ecr create-repository --repository-name hello-world --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE

Para obter mais informações, consulte a Etapa 3: criar um repositório no Guia do usuário do Amazon ECR.

9.    Marque sua imagem de contêiner para enviar para seu repositório executando o seguinte comando docker tag da CLI do Docker:

**Importante:**Substitua 123456789012 pela ID da sua conta da AWS. Substitua us-east-1 pela sua região da AWS.

docker tag  hello-world:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

10.    Envie sua imagem de contêiner para seu repositório executando o seguinte comando docker push da CLI do Docker:

**Importante:**Substitua 123456789012 pela ID da sua conta da AWS. Substitua us-east-1 pela sua região da AWS.

docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

Sua imagem de contêiner agora está em seu repositório do Amazon ECR. Para mais informações, consulte a Etapa 4: enviar uma imagem para o Amazon ECR no Guia do usuário do Amazon ECR.

11.    Crie e teste sua função do Lambda usando a imagem do contêiner que você criou. Para obter instruções, consulte Como criar funções do Lambda definidas como imagens de contêiner no Guia do desenvolvedor do Lambda.


AWS OFICIAL
AWS OFICIALAtualizada há 2 anos