Não é possível usar o módulo de Pedidos no Lambda AWS

Preciso de fazer uma chamada de descanso dentro de um script python, que funciona uma vez por dia. Não posso embalar o pacote "requests" no meu pacote python usando o AWS Lambdas. Obtenho o erro:"incapaz de importar o módulo 'lambda_function': nenhum módulo chamado lambda_function "

Passei para o guião predefinido do hello_world. Posso embalá-lo num zíper e carregá-lo. Tudo funciona. Assim que eu colocar "pedidos de importação" no arquivo, eu recebo este erro.

Aqui está o que eu já fiz. did:

  1. as permissões do zip e da pasta do projecto (incluindo sub-pastas) são definidas como `chmod 777`. Então as permissões não devem ser um problema.
  2. o programa em si está dentro da pasta raiz. Quando você abre o arquivo zip, você o vê diretamente.
  3. instalei o pacote de pedidos na pasta de topo do projecto, usando o 'sudo pip install requests-t PATH_ TOO_ ROOT_FOLDER'

o nome de tudo se parece com isto:

  • ficheiro zip: função lambda_function.zip
  • ficheiro py: lambda_function.py
  • Método de tratamento: lambda_handler (evento, contexto)
  • manipulador-definição na " webconfig: lambda_function.lambda_handler

o ficheiro que quero executar no final parece-se com isto:

import requests
import json


def lambda_handler(event, context):
    url = 'xxx.elasticbeanstalk.com/users/login'
    headers = {"content-type": "application/json", "Authorization": "Basic Zxxxxxxxxx3NjxxZxxxxzcw==" }
    response = requests.put(url, headers=headers, verify=False)
    return 'hello lambda_handler'
Fico feliz por qualquer tipo de Ajuda. Já usei várias horas neste assunto.

Author: codepleb, 2016-11-22

3 answers

Para usar o módulo de pedidos, pode simplesmente importar requests de botocore.vendored. Por exemplo:

from botocore.vendored import requests

def lambda_handler(event, context):
   response = requests.get("https://example.com/")
   print response.json

Você pode ver este gist para saber mais módulos que podem ser importados diretamente na AWS lambda

 69
Author: Sining Liu, 2018-01-29 06:46:39
Finalmente resolvi o problema: a estrutura do meu arquivo zip estava quebrada. É importante que o script python e as dependências empacotadas (como pastas) estejam na raiz do arquivo zip. Isto resolveu o meu problema. É um pouco deprimente encontrar erros tão fáceis depois de horas de tentativas e falhas.
 10
Author: codepleb, 2016-11-22 12:30:48
Acho que tens na consola Lambda. Você precisa primeiro criar o pacote de implementação da função Lambda, e, em seguida, usar o console para carregar o pacote.
  • você cria uma pasta, por exemplo project-dir no seu sistema (localmente)
  • crie lambda_function.py em project-dir, Copie o conteúdo de {[[0]} da consola lambda e cole-o em project-dir/lambda_function.py
  • pip install requests -t /path/to/project-dir
  • fecha o conteúdo do directório project-dir, que é o teu pacote de implementação (fecha o conteúdo do directório, não é o directório)

Vá para a consola Lambda, seleccione Enviar o ficheiro zip no tipo de entrada de código e envie o seu pacote de implementação. Os pedidos de importação devem funcionar sem qualquer erro.

 5
Author: Pramod Munemanik, 2017-12-20 10:20:40