こんにちは、ゲームソリューション部のsoraです。
今回は、Lambda(Go)でLambdaパッケージを書き忘れて無限ループした話について書いていきます。
Lambdaでの無限ループ
以下のLambda(Go)にてテストを実行したところ、実行ログにエラーが表示されました。
package main
import(
"database/sql"
"github.com/go-sql-driver/mysql"
"fmt"
"crypto/tls"
)
func main() {
// TiDBへの接続
mysql.RegisterTLSConfig("tidb", &tls.Config{
MinVersion: tls.VersionTLS12,
ServerName: "[TiDB Cloudで表示された接続コード]",
})
db, err := sql.Open("mysql", "[TiDB Cloudで表示された接続コード]")
if err != nil {
fmt.Println("DB connection error")
}
defer db.Close()
// SQL実行
rows, err := db.Query("SELECT * from PrefecturesTable")
if err != nil {
fmt.Println("SQL error")
}
defer rows.Close()
fmt.Println("都道府県名, 県庁所在地, 地域")
for rows.Next() {
var prefecturename, prefecturalcapital, region string
err := rows.Scan(&prefecturename, &prefecturalcapital, ®ion)
if err != nil {
fmt.Println("Scan error")
return
}
fmt.Printf("%s, %s, %s\n", prefecturename, prefecturalcapital, region)
}
}
{
"errorType": "Runtime.ExitError",
"errorMessage": "RequestId: f7f6ec4d-d82a-4756-9eb7-d009cfb405e1 Error: Runtime exited with error: exit status 1"
}
"都道府県名, 県庁所在地, 地域"
・・・
2023/06/29 07:36:05 <nil>
"都道府県名, 県庁所在地, 地域"
・・・
2023/06/29 07:36:06 <nil>
"都道府県名, 県庁所在地, 地域"
・・・
原因→解消
原因が何かを考えていて、rows.Next()で無限ループしているのかと思ったものの、そうであればfmt.Println("都道府県名, 県庁所在地, 地域")
が何度も実行されているのはおかしいし、実行ログに日付と時間が出ているのもおかしいと思っていました。
原因としては、github.com/aws/aws-lambda-go/lambda
パッケージを利用しておらず、lambda.Start()
を使用せずにmainにそのままコードを書いていることが問題です。
公式ページに記載の通り、github.com/aws/aws-lambda-go/lambda
パッケージを含める必要があります。
以下が修正版のコードです。
package main
import(
"database/sql"
"github.com/go-sql-driver/mysql"
"github.com/aws/aws-lambda-go/lambda"
"fmt"
"crypto/tls"
)
func TiDBOperation() () {
// TiDBへの接続
mysql.RegisterTLSConfig("tidb", &tls.Config{
MinVersion: tls.VersionTLS12,
ServerName: "[TiDB Cloudで表示された接続コード]",
})
db, err := sql.Open("mysql", "[TiDB Cloudで表示された接続コード]")
if err != nil {
fmt.Println("DB connection error")
}
defer db.Close()
// SQL実行
rows, err := db.Query("SELECT * from PrefecturesTable")
if err != nil {
fmt.Println("SQL error")
}
defer rows.Close()
fmt.Println("都道府県名, 県庁所在地, 地域")
for rows.Next() {
var prefecturename, prefecturalcapital, region string
err := rows.Scan(&prefecturename, &prefecturalcapital, ®ion)
if err != nil {
fmt.Println("Scan error")
return
}
fmt.Printf("%s, %s, %s\n", prefecturename, prefecturalcapital, region)
}
}
func main() {
lambda.Start(TiDBOperation)
}
最後に
今回は、Lambda(Go)でLambdaパッケージを書き忘れて無限ループした話を記事にしました。
どなたかの参考になると幸いです。