如何在依赖S3存储桶的本地计算机上开发和测试python AWS-lambda

时间:2019-01-21 17:11:31

标签: python docker amazon-s3 aws-lambda aws-cli

是否有一种方法可以在本地计算机上制作python aws-lambda,该计算机可以从S3存储桶读取和写入数据。我可以使用以下代码在AWS网页上的lambda上运行它,而不会出现问题。

import json

def lambda_handler(event, context):
    # TODO implement
    now = datetime.datetime.now()
    cur_day = "{}{}{}".format(now.strftime('%d'),now.strftime('%m'),now.year)
    print(cur_day)
    my_contents = get_data_from_s3_file('myBucket', 'myFile')
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

def get_data_from_s3_file(bucket, my_file):
    """Read the contents of the file as a string and split by lines"""
    my_data = s3.get_object(Bucket=bucket, Key=my_file)
    my_text = my_data['Body'].read().decode('utf-8').split('\n')

    return my_text

问题在于,这是编写和调试代码的糟糕环境,因此我想在自己的本地计算机上进行操作。我已经设置了AWS-CLI并安装了一个应用程序,可让您在名为python-lambda-local的本地环境中运行lambda代码,如here所示。

pip install python-lambda-local
python-lambda-local -l lib/ -f lambda_handler -t 5 pythonLambdaLocalTest.py event.json

文件“ pythonLambdaLocalTest.py”包含与我从控制台在AWS上运行的相同的代码-这样做的好处是我可以使用IDE(例如Visual Studio代码)来编写它。如果我在不调用“ get_data_from_s3_file”的情况下运行它,则该代码似乎在本地计算机上运行良好,并且“ cur_day”已打印到控制台。但是,如果我运行完整脚本并尝试连接到存储桶,则会收到以下错误:

raise EndpointConnectionError(endpoint_url=request.url, error=e)
botocore.exceptions.EndpointConnectionError: Could not connect to the 
endpoint URL: "https://myBucket/myfile"

有人可以从本地计算机连接到s3吗?我确定必须有一种使用aws-cli的方法?或无服务器应用程序模型(SAM)?但是,我找不到足够完整的指南以供遵循。

我还尝试过从控制台下载.yaml文件并将其放在本地目录中并运行:

sam local start-api -t pythonLambdaLocalTest.yaml

我得到:

2019-01-21 16:56:30 Found credentials in shared credentials file: ~/.aws/credentials
Error: Template does not have any APIs connected to Lambda functions

这表明可能是一个api可以将我的本地计算机连接到aws s3存储桶,但是我在设置此类内容方面经验很少,并且在用术语方面苦苦挣扎。对使这种方法运行有什么帮助吗?我最近开始使用docker,所以使用此方法的一些方法也很好吗?

我也尝试过这种方法here,可以看到我的lambda函数在Visual Studio代码中列出,但是我似乎看不到或编辑任何代码,并且没有明显的链接可以这样做-大多数支持似乎都在node.js周围,而我的lambda是python。

我还意识到cloud9是一个选项,但似乎需要一个正在运行的EC2实例,而我不愿意为此付费。

我尝试了很多方法,但是似乎没有任何完整的指南。任何帮助,高度赞赏!

0 个答案:

没有答案