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

How to run a AWS lambda via SAM local that writes to an S3 bucket?

我正在查看 运行通过 SAM 在本地使用我们的一些 AWS lambda,包括写入 S3 存储桶的一个。有没有办法让 S3 在本地 运行,或者与云中的 S3 存储桶对话并写入,同时在本地 运行 设置 lamda?

是的,我实现这一点的方式(在经历了很多困难之后,文档散落在各处,并专注于不属于我的特定用例)是 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