如何使用python在AWS Lambda中进行HTTP REST调用?

时间:2019-11-22 12:16:27

标签: aws-lambda

要使用python进行http调用,我的方法是使用requests

但是requests未安装在lambda上下文中。使用import requests导致未找到模块错误。

另一种方法是使用提供的库from botocore.vendored import requests。但是AWS不推荐使用此库。

我想避免将依赖项打包在我的lambda zip文件中。

在基于python的lambda中进行REST调用的最聪明的解决方案是什么?

1 个答案:

答案 0 :(得分:1)

解决方案1)

from botocore.vendored import requests起已弃用,建议的方法是安装依赖项。

$ pip install requests
import requests
response = requests.get('https://...')

另请参阅。 https://aws.amazon.com/de/blogs/developer/removing-the-vendored-version-of-requests-from-botocore/

  

但是您必须注意将依赖项打包到lambda zip中。

解决方案2)

我的首选解决方案是使用urllib。它在您的lambda执行上下文中。

https://repl.it/@SmaMa/DutifulChocolateApplicationprogrammer

import urllib.request
import json

res = urllib.request.urlopen(urllib.request.Request(
        url='http://asdfast.beobit.net/api/',
        headers={'Accept': 'application/json'},
        method='GET'),
    timeout=5)

print(res.status)
print(res.reason)
print(json.loads(res.read()))

解决方案3)

使用http.client,它也在lambda执行上下文中。

https://repl.it/@SmaMa/ExoticUnsightlyAstrophysics

import http.client

connection = http.client.HTTPSConnection('fakerestapi.azurewebsites.net')
connection.request('GET', '/api/Books')

response = connection.getresponse()
print(response.read().decode())