如何使用 go-iris 框架将 REST API 部署到 AWS lambda

我使用 Go Iris 框架创建了 REST API。现在我想用 lambda 函数在 AWS 上部署这些 API。我正在使用 MySQL 作为数据库。是否可以在 AWS lambda 上部署我的 Go 可执行文件,或者我是否需要根据 AWS lambda 规范修改我的代码?我试图找到解决方案,但没有得到太多信息。


这是我的 API 端点之一。


package main


import (

    "database/sql"

    "github.com/kataras/iris"

    "github.com/kataras/iris/middleware/logger"

    "github.com/kataras/iris/middleware/recover"

)


type Reward struct {

    Id int `json:"reward_id"`

    LotteryID int `json:"lottery_id"`

    RewardName string `json:"reward_name"`

    Description string `json:"reward_description"`

    Asset int `json:"reward_asset"`

    AssetName string `json:"reward_asset_name"`

    }


func dbConn() (db *sql.DB) {

    dbDriver := "mysql"

    dbUser := "xxx"

    dbPass := "xxx"

    dbName := "xxx"

    db, err := sql.Open(xxxxxxxxx)

    if err != nil {

    panic(err.Error())

    }

    return db

}



func newApp() *iris.Application {

    app := iris.New()

    app.Logger().SetLevel("debug")


    app.Use(recover.New())

    app.Use(logger.New())

    

    db := dbConn()


    app.Get("/reward/{reward_id:int}", func(ctx iris.Context) {

    id1 := ctx.Params().GetIntDefault("reward_id", 0)



    stmtOut, err := db.Prepare("select id, lottery_id,reward_name,reward_description,reward_asset, reward_asset_name from rewards_table where id =?")

    if err != nil {

    panic(err.Error())

    }

    defer stmtOut.Close()


    var id, lotteryId, rewardAsset int

    var rewardName, rewardDescription, rewardAssetName string


    err1 := stmtOut.QueryRow(id1).Scan(&id, &lotteryId, &rewardName, &rewardDescription, &rewardAsset, &rewardAssetName)

    if err1 != nil {

        panic(err.Error())

    }

    reward := Reward{

        Id:          id,

        LotteryID:   lotteryId,

        RewardName:  rewardName,

        Description: rewardDescription,

        Asset:       rewardAsset,

        AssetName:   rewardAssetName,

    }

    ctx.JSON(&reward)

    })

    return app

}

我还有几个 API 端点可以执行基本的 CRUD 操作。我正在考虑使用 AWS lambda 和 AWS API Gateway。


慕桂英4014372
浏览 118回答 1
1回答

aluckdog

我是否需要根据 AWS lambda 规范修改我的代码?是的。您的 lambda 代码需要有一个处理程序:Go 中的 AWS Lambda 函数处理程序这是您的函数的入口点。此外,您的 go 程序似乎是基于iris. 如果是这种情况,您将无法使用它,因为您无法像使用常规服务器那样从 Internet 调用 lambda。lambda 也最多运行 15 分钟,因此它作为服务器的使用将非常有限。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go