如何通过写入 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
我正在查看 运行通过 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