解決したいこと
下記のAPI Gatewayに紐付けたプログラム(Lambda関数)をローカルでデバッグしたいです。
最も簡単にできる方法があれば教えていただきたいです。
プログラム内容としては、APIGatewayのプロキシリクエストが来ると、DynamoDBのテーブルにアクセスして、itemを取得して返却するというものです。
当方、GoやAWSを触り始めたばかりの初心者のため、一つずつしっかりと学んでいきたいと思っています。
わかりやすく説明していただけると幸いです。
どんな方法があるのか列挙していただいたり、指針を示していただけるだけでありがたいです。
よろしくお願い致します。
Go
1package main 2 3import ( 4 "encoding/json" 5 6 "github.com/aws/aws-lambda-go/events" 7 "github.com/aws/aws-lambda-go/lambda" 8 "github.com/aws/aws-sdk-go/aws" 9 "github.com/aws/aws-sdk-go/aws/session" 10 "github.com/aws/aws-sdk-go/service/dynamodb" 11 "github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute" 12) 13 14// Item DBに入れるデータ 15type Item struct { 16 UserID int `dynamodbav:"user_id" json:user_id` 17 CreatedTime string `dynamodbav:"created_time" json:created_time` 18} 19 20// Response Lambdaが返答するデータ 21type Response struct { 22 RequestMethod string `json:RequestMethod` 23 Result Item `json:Result` 24} 25 26func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { 27 method := request.HTTPMethod 28 pathparam := request.PathParameters["userid"] 29 30 // DB接続 31 sess, err := session.NewSession() 32 if err != nil { 33 return events.APIGatewayProxyResponse{ 34 Body: err.Error(), 35 StatusCode: 500, 36 }, err 37 } 38 39 db := dynamodb.New(sess) 40 41 // 検索条件を用意 42 getParam := &dynamodb.GetItemInput{ 43 TableName: aws.String("tablename"), 44 Key: map[string]*dynamodb.AttributeValue{ 45 "user_id": { 46 N: aws.String(pathparam), 47 }, 48 }, 49 } 50 51 // 検索 52 result, err := db.GetItem(getParam) 53 if err != nil { 54 return events.APIGatewayProxyResponse{ 55 Body: err.Error(), 56 StatusCode: 404, 57 }, err 58 } 59 60 // 結果を構造体にパース 61 item := Item{} 62 err = dynamodbattribute.UnmarshalMap(result.Item, &item) 63 if err != nil { 64 return events.APIGatewayProxyResponse{ 65 Body: err.Error(), 66 StatusCode: 500, 67 }, err 68 } 69 70 // httpレスポンス作成 71 res := Response{ 72 RequestMethod: method, 73 Result: item, 74 } 75 jsonBytes, _ := json.Marshal(res) 76 77 //返り値としてレスポンスを返す 78 return events.APIGatewayProxyResponse{ 79 Body: string(jsonBytes), 80 StatusCode: 200, 81 }, nil 82} 83 84func main() { 85 lambda.Start(handler) 86}
AWS Lambda+API Gateway+DynamoDBでCRUD APIを作るのをGolangでやってみた
前提
- Lambda関数は作成済み
- APiGatewayは作成、デプロイ済み
- DynamoDBにてテーブル、itemは作成済み
#環境
- VsCode Version: 1.56.0
- Mac M1
- Delve Debugger Version: 1.6.0
- Go version: go1.16.3 darwin/arm64
- AWS CLI version aws-cli/2.2.0 Python/3.9.4 Darwin/20.3.0 source/arm64 prompt/off
背景
上記のコードでDynamoDBのテーブルからuser_idを指定してGetItem()によってitemを取得していますが、本当は複数のitemを取得したいです。そのコードを変更する際にローカルではデバッグできない(現状では、Lambdaコンソールに入り、実行ファイルのzipファイルをアップロードし、その後エンドポイントを叩く必要がある or API Gatewayコンソールでテストを実行する必要がある)ので、 ローカルでのデバッグ方法を知りたいです。
あなたの回答
tips
プレビュー