Aws-lambda-function-in-go
AWS Lambda – Goの機能
Go言語サポートは、AWSに最近追加されたものです。 Goを使用するには、AWS Lambda関数の作成中にAWSコンソールから言語を選択する必要があります。 この章では、Go言語のAWS Lambda関数について詳しく説明します。
Goのインストール
開始するには、Go言語のサポートが必要です。 このセクションでは、GoでAWS Lambdaの使用を開始するために次の詳細を確認します。 これはGoダウンロードの公式サイトです:https://golang.org/dl/
次に、オペレーティングシステムごとにパッケージをダウンロードします。 ここに記載されている手順に従って、Goを各オペレーティングシステムにインストールします。
Windowsへのインストール
Windowsの場合、32ビットおよび64ビットのダウンロードが利用可能であることに注意してください。 zipファイルをダウンロードして内容を抽出し、選択したディレクトリに保存します。
- ControlPanel --→ System --→ Advanced system settings。*で利用可能な環境変数を追加します。
今、*環境変数*ボタンをクリックし、ここに示すようにディレクトリパスを追加します-
ここに示すようにシステム変数を編集することもできます-
これらの手順が完了すると、Goでの作業を開始できるはずです。 コマンドプロンプトを開き、Goコマンドのバージョンを確認します。 同じものについては、次のスクリーンショットをご覧ください。
LinuxおよびMac OSのインストール
LinuxおよびMac OSにパッケージをインストールするには、以下に示す指示に従ってください-
パッケージを解凍し、 /usr/local/go の場所に保存します。 次に、 /usr/local/go/bin をPATH環境変数に追加します。 /etc/profile または $ HOME/.profile を使用して実行できます。
この目的のために、次のコマンドを使用できます
export PATH=$PATH:/usr/local/go/bin
Windows、Linux、およびMacにAWSサポートを追加するには、gitコマンドラインで次を使用します-
go.exe get -u github.com/aws/aws-lambda-go/lambda
go.exe get -u github.com/aws/aws-lambda-go/lambdacontext
go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip
コードのWindows/Linux/Macをコンパイルするには、次のコマンドを使用します-
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
GOを使用したAWS Lambda関数
ビルドが実行可能ファイルを提供するときにGoで返されるプログラム。 以下は、AWS LambdaをサポートするGoの簡単なプログラムです。 これにはLambdaプログラミング機能があるため、 github.com/aws/aws-lambda-go/lambda をインポートする必要があります。AWSLambdaのもう1つの重要なニーズはハンドラーです。
Main.go
//main.go
package main
import (
"github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
return "Hello Lambda", nil
}
func main() {
//Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
*Go* プログラムの実行は、メインwhere lambdaから開始されることに注意してください。 startはハンドラー関数で呼び出されます。 以下に示すコードを観察します-
func main() {
//Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
次に、Goコマンドを使用して上記のファイルを実行し、実行可能ファイルを圧縮します。
私たちが使用しているファイルの構造はここに示されているとおりです-
*go build* を使用すると、main.exeという実行可能ファイルが作成されます。 ファイルを圧縮してAWS Lambdaにアップロードするには、次の手順を使用できます-
コードのWindows/Linux/Macをコンパイルするには、次のコマンドを使用します-
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
次に、AWSコンソールにログインし、 Go をランタイムとして使用してLambda関数を作成します-
関数が作成されたら、上記で作成した実行可能zipファイルをアップロードします。
Goを使用したLambda関数ハンドラー
ハンドラーは、Goプログラムの実行を開始する場所です。 lambda.start のメイン呼び出しから、ハンドラー関数を使用して実行が呼び出されます。 追加されるハンドラーは main になることに注意してください。
理解のためにここのコードを観察してください-
func main() {
//Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
以下のスクリーンショットに従ってください-
次に、関数を保存してテストします。 ここに示すように実行結果を見ることができます。
対応するログ出力は、次のようになります-
Goを使用したコンテキストオブジェクト
GoのAWS Lambdaは、コンテキストに次のグローバル変数とプロパティを提供します。
- MemoryLimitInMB -AWSラムダで設定されるメモリ制限(MB)。
- FunctionName -AWSラムダ関数の名前。
- FunctionVersion -実行しているawsラムダ関数のバージョン。
- LogStreamName -クラウドウォッチログストリーム名。
- LogGroupName -クラウドウォッチグループ名。
コンテキストで利用可能なプロパティは以下のように与えられます-
AwsRequestID
これは、AWS Lambda関数が呼び出されたときに取得するAWSリクエストIDです。
ClientContext
これには、AWS Mobile SDKを介して呼び出されたときのクライアントアプリケーションとデバイスに関する詳細が含まれます。 nullでもかまいません。 クライアントコンテキストは、クライアントID、アプリケーションタイトル、バージョン名、バージョンコード、アプリケーションパッケージ名などの詳細を提供します。
InvokedFunctionArn
呼び出された関数のARN。 修飾されていないARNは$ LATESTバージョンを実行し、エイリアスはそれが指す関数バージョンを実行します。
身元
AWSモバイルSDKで使用すると、Amazon Cognito IDプロバイダーに関する詳細が提供されます。
コンテキストの詳細を出力するために main.go に追加された変更-
//main.go
package main
import (
"context"
"log"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-lambda-go/lambdacontext"
)
func hello(ctx context.Context) (string, error) {
lc, _ := lambdacontext.FromContext(ctx);
log.Print(lc);
log.Print(lc.AwsRequestID);
log.Print(lc.InvokedFunctionArn);
return "Hello Lambda", nil
}
func main() {
//Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Goで使用するには、 log および lambda context をインポートする必要があります。 コンテキストの詳細は次のとおりです-
func hello(ctx context.Context) (string, error) {
lc, _ := lambdacontext.FromContext(ctx);
log.Print(lc);
log.Print(lc.AwsRequestID);
log.Print(lc.InvokedFunctionArn);
return "Hello Lambda", nil
}
上記のコードをテストすると、次の出力を確認できます-
ロギングデータ
*Go* を使用すると、以下に示すようにlogまたはfmtモジュールを使用してデータを記録できます-
//main.go
package main
import (
"log"
"fmt"
"github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
log.Print("Hello from Lambda Go using log");
fmt.Print("Hello from Lambda Go using fmt");
return "Hello Lambda", nil
}
func main() {
//Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
同じための出力は以下に示すとおりです-
CloudWatchでログを確認する
CloudWatchでもログを確認できます。 このためには、AWSサービスに移動してcloudwatchを選択し、左側の[ Logs ]をクリックします。 今、ログを見るためにリストでラムダ関数を検索します-
関数エラー
以下のコードに示すように、エラーモジュールを使用してAWS Lambdaでカスタムエラー処理を作成できます-
//main.go
package main
import (
"errors"
"github.com/aws/aws-lambda-go/lambda"
)
func hello() error {
return errors.New("There is an error in the code!")
}
func main() {
//Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
上記のコードの出力は以下のとおりです-