Golang结合Serverless框架开发实践

Golang结合Serverless框架开发实践 大家好,

有人能帮助我使用无服务器框架部署 Golang 的 AWS Lambda 代码吗? 我按照文档操作,它成功部署并创建了 Lambda 函数,但无法运行,提示权限被拒绝。

我使用的是 Windows 10 系统。

请注意,我能够按照 AWS 文档手动部署 Go Lambda 代码,使用 build-lambda-zip.exe 进行构建和压缩。

问题出现在使用无服务器框架进行自动部署时。

2 回复

你在AWS上设置权限了吗?

这是一篇不错的文章:
http://www.alexedwards.net/blog/serverless-api-with-go-and-aws-lambda

更多关于Golang结合Serverless框架开发实践的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在 Windows 10 上使用 Serverless Framework 部署 Go AWS Lambda 时遇到权限被拒绝的问题,通常是由于构建过程中文件权限或路径问题导致的。以下是解决方案和示例代码。

首先,确保您的 serverless.yml 配置正确,指定 Go 运行时和构建命令。示例 serverless.yml 文件:

service: go-lambda-serverless

provider:
  name: aws
  runtime: go1.x
  region: us-east-1

functions:
  hello:
    handler: bin/hello
    events:
      - http:
          path: hello
          method: get

plugins:
  - serverless-go-build

custom:
  goBuild:
    bin: ./bin
    cmd: GOOS=linux GOARCH=amd64 go build -o bin/hello main.go
    skipCheck: true

在 Windows 上,使用 serverless-go-build 插件时,可能需要处理路径分隔符问题。安装插件:

npm install --save-dev serverless-go-build

然后,在项目根目录创建 main.go 文件,示例代码:

package main

import (
    "context"
    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
)

func handler(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    return events.APIGatewayProxyResponse{
        StatusCode: 200,
        Body:       "Hello from Go Lambda with Serverless!",
    }, nil
}

func main() {
    lambda.Start(handler)
}

运行部署命令:

serverless deploy

如果仍然遇到权限问题,可能是因为 Windows 环境变量或构建输出路径不正确。确保在 Windows 命令提示符或 PowerShell 中设置环境变量:

set GOOS=linux
set GOARCH=amd64
go build -o bin/hello main.go

或者,在 PowerShell 中:

$env:GOOS="linux"
$env:GOARCH="amd64"
go build -o bin/hello main.go

然后重新运行 serverless deploy。这应该解决权限被拒绝的问题,并成功部署 Lambda 函数。

回到顶部