我正在通过SAM在本地运行我们的一些AWS lambda,包括一个写入S3存储桶的lambda。有没有一种方法可以让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