【问题标题】:Run golang lambda function locally在本地运行 golang lambda 函数
【发布时间】:2020-03-03 19:03:27
【问题描述】:

我正在尝试开发一个必须与 S3 和 dynamoDB 一起使用的 lambda。 问题是,因为我不熟悉 gos 的 SDK,所以我将进行大量测试和尝试。 每次我更改代码时,我都必须编译项目并将其上传到 aws。 有什么办法可以在本地做吗?通过某种配置让我从我的计算机本地调用 aws 的服务? 谢谢!

这主要和golang有关,其他语言比如python可以直接在aws lambda函数页面上运行,并且node有cloud9支持。

【问题讨论】:

  • 你说得对;必须上传一个函数来测试你的代码是疯狂的。 AWS 提供了一些相对复杂的工具来在本地简化 lambda 运行时。 aws.amazon.com/about-aws/whats-new/2017/08/… 是一种选择。我通常会尝试让代码在本地运行,而不需要太多工具以方便开发。
  • @Flimzy 没有重复,这是 cloud9 不支持 golang 的一种特殊情况(与 node.js 和 python 一样)并且运行周期很烦人,需要您构建和上传每次更改的文件。
  • @DanFarrell 我看到有人推荐 SAM。想也许还有其他我找不到的选择。现在会检查SAM,希望会有更好的东西。

标签: amazon-web-services go aws-lambda


【解决方案1】:

您可以使用 lambci docker 映像在 AWS 上使用相同的 Lambda 运行时在本地执行您的代码。

https://github.com/lambci/docker-lambda

您也可以在另一个容器中本地运行 dynamo DB

https://hub.docker.com/r/amazon/dynamodb-local/

要模拟 Lambda 上可用的凭据/角色,只需传入您的 API 凭据 VIA 环境变量。 (用于 s3 访问)

干杯 -JH

【讨论】:

  • 这些是很好的建议,但我不同意“只传递你的 Api 凭据”。最好假设 lambda 将扮演的角色,并传递 那些 凭据。否则,您会将定义所需权限的过程推迟到非常不方便的时间(开发之后)。我更喜欢为 lambda 创建一个空角色,代入它,并在我开发时开始添加权限。
  • 我认为在本地开发时将 API 凭据 VIA 环境变量传递给 docker 容器没有问题(即:用户的凭据,或承担角色 VIA STS 并生成会话令牌)。我知道没有其他方法可以通过本地 IAM 角色模拟资源的访问。也许你能告诉我如何做到这一点,将不胜感激。
  • 我的意思是区分 您的 作为 AWS 开发人员的凭据和 应用程序的 线程作为 lambda 将运行的角色。但是还有其他方法可以公开凭据,甚至可以使用 lambda。您可以将配置文件挂载到通常路径的 docker 容器中。可以将配置文件配置为自动承担角色(只要不需要 MFA 或作为假设配置文件的一部分)。或者,本地元数据服务器不是闻所未闻的选项docs.aws.amazon.com/sdk-for-go/v1/developer-guide/…
【解决方案2】:

您可以使用这个aws-lambda-go-test 模块,它可以在本地运行 lambda,并可用于测试来自 lambda 的实际响应

完全披露我对这个模块进行了分叉和升级

【讨论】:

    猜你喜欢
    • 2020-03-12
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2019-11-27
    • 2022-11-20
    相关资源
    最近更新 更多