是否有一种方法可以在本地计算机上制作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实例,而我不愿意为此付费。
我尝试了很多方法,但是似乎没有任何完整的指南。任何帮助,高度赞赏!