如何通过写入S3存储桶的SAM本地运行AWS Lambda?

时间:2019-08-07 10:35:05

标签: amazon-web-services aws-lambda aws-sam-cli

我正在考虑通过SAM在本地运行我们的某些AWS Lambda,包括一个写入S3存储桶的AWS Lambda。有没有办法让S3在本地运行,或者在本地运行lamda时与云中的S3存储桶对话并对其进行写入?

1 个答案:

答案 0 :(得分:1)

是的,我实现这一目标的方法(经过很多困难,文档散布在各处,并专注于不是我的特定用例)是localstack

您需要运行docker,然后:

pip install localstack

然后:

localstack start

Some documentation I've found建议您使用http://localhost:4566并确实指向其中的浏览器显示存在某些东西,但是我没有运气指向boto3或那里的另一个AWS客户端,得到了非常神秘的错误消息。

实际端口为4572,请尝试this

aws --endpoint-url=http://localhost:4572 s3api create-bucket --bucket mybucket --region us-west-1

现在,如果您具有这样的lambda函数:

import boto3


def lambda_handler(event, context):
    s3 = boto3.client('s3' ,
        endpoint_url='http://localhost:4572',
        use_ssl=False)
    s3.create_bucket(Bucket="test-bucket")
    #rest of your function here

最后一个组件(可能取决于您的Docker设置),您可能需要这样调用它:

sam local invoke  --docker-network host