我使用Go Iris框架创建了REST。现在,我想用lambda函数在AWS上部署这些API。我正在使用MySQL作为数据库。是否可以在AWS上部署Go可执行文件,或者是否需要根据AWS规范修改代码?我正在设法找到解决办法,但没有得到多少信息。
这里是我的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
}
func main() {
app := newApp()
app.Run(iris.Addr(":8080"), iris.WithoutServerError(iris.ErrServerClosed), iris.WithOptimizations)
}我没有更多的API端点来执行基本的CRUD操作。我正在考虑使用AWS、lambda和API网关。
发布于 2020-07-13 11:14:24
是否需要根据AWS规范修改我的代码?
是。用于lambda的代码需要有一个处理程序。
这是函数的入口点。
而且,你的围棋程序似乎是一个建立在iris上的web服务器。如果是这样的话,您将无法使用它,因为您的不能像普通服务器那样从internet调用lambda。
此外,lambda最多运行15分钟,因此它作为服务器的使用将是非常有限的。
https://stackoverflow.com/questions/62872066
复制相似问题