##解決したいこと
下記のコードをローカルで実行したいです。
Go
1package main 2 3import ( 4 "fmt" 5 6 "github.com/aws/aws-lambda-go/lambda" 7) 8 9type MyEvent struct { 10 Name string `json:"What is your name?"` 11 Age int `json:"How old are you?"` 12} 13 14type MyResponse struct { 15 Message string `json:"Answer:"` 16} 17 18func HandleLambdaEvent(event MyEvent) (MyResponse, error) { 19 return MyResponse{Message: fmt.Sprintf("%s is %d years old!", event.Name, event.Age)}, nil 20} 21 22func main() { 23 lambda.Start(HandleLambdaEvent) 24} 25
Go言語で書いたAWS Lambda関数をローカルで実行する方法を知りたいです。既にSAM(Serverless Application Model)を使用すればローカルでプログラムを実行できそうなことは調べております。が、SAMを使用しなくてもできるとシニアエンジニアの方に言われました。
ヒントとして、下記のlambda.start()を
go
1func main() { 2 lambda.Start(HandleLambdaEvent) 3}
go
1func main() { 2 ctx := context.Background() 3 hogehoge(ctx) 4}
にすることで、ローカルでも実行できると言われております。
なぜ、hogehogeに引数としてctxを入力する必要があるのか?
hogehogeに引数としてctxを入力することで、ローカルでも実行できるようになるのか?
がわかりません。
調べたら出てくるかと思い、質問せずに終わりましたが、そのとき質問をすればよかったと深く後悔しております。
調べたこと・理解していること
- Lambda関数は、リクエストなどのイベントを処理するためのもの
- main関数の中にあるLambda.start(ハンドラー)によってLambda関数が実行される
- Contextに関して↓
Context は、APIのサーバーやクライアントを使うときに、コンテキストを提供してキャンセルや、タイムアウト、値を渡したり出来る仕組み。
Go の Context を学ぶ
とのことですが、理解できませんでした。
次に、この下記のサイトをみました。
環境と呼び出しリクエストに関するメタデータへのアクセス
Go の AWS Lambda context オブジェクト
要するにリクエストが処理されるときにメタデータが作成?されていて、それにアクセスできるという理解です。
背景
AWS Lambdaコンソールを開いて、Goの圧縮した実行ファイルをアップロードして、動作確認&テストをするのはデバッグができないし、手間がかかるからです。
環境
- VsCode Version: 1.56.0
- Mac M1
- Delve Debugger Version: 1.6.0
- Go version: go1.16.3 darwin/arm64
- aws-cli/2.2.0 Python/3.9.4 Darwin/20.3.0 source/arm64 prompt/off
AWSやGoを使い始めたばかりであり、わからないことがたくさんあります。その上で一つずつ学び、何とか目的を実現したいと思っています。
指針を示していただくだけでもありがたいので、どうぞよろしくお願いいたします
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/08 02:14
2021/05/08 04:19
2021/05/08 07:02