質問するログイン新規登録

Q&A

0回答

1253閲覧

API Gatewayに紐付けたLambda関数をローカルでデバッグしたい。

rapsody

総合スコア7

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Amazon DynamoDB

Amazon DynamoDBは、 AWS上のNoSQLデータベースサービスです。フルマネージド型のサービスで、スキーマレス、高速且つ安定性のある動作、自動的に容量を変更する自動スケーリングなどの特徴を持ちます。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2021/05/08 08:11

編集2021/05/08 08:16

0

0

解決したいこと

下記の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コンソールでテストを実行する必要がある)ので、 ローカルでのデバッグ方法を知りたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問