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

jam*_*ker 6 amazon-web-services aws-lambda aws-sam-cli

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

Jos*_*but 5

是的,我实现这一目标的方法(在经历了很多困难之后,文档分散在各处,并且专注于不属于我的特定用例)是使用localstack

你需要 docker 运行,然后:

pip install localstack
Run Code Online (Sandbox Code Playgroud)

然后:

localstack start
Run Code Online (Sandbox Code Playgroud)

我发现的一些文档建议您使用http://localhost:4566,并且确实将浏览器指向那里会显示某些内容存在,但我没有运气指向那里boto3或另一个 AWS 客户端,收到非常神秘的错误消息。

真实端口是4572,试试这个

aws --endpoint-url=http://localhost:4572 s3api create-bucket --bucket mybucket --region us-west-1
Run Code Online (Sandbox Code Playgroud)

现在如果你有一个像这样的 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
Run Code Online (Sandbox Code Playgroud)

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

sam local invoke  --docker-network host
Run Code Online (Sandbox Code Playgroud)