AWS Lambda –Goでの機能
Go Languageのサポートは、AWSに最近追加されたものです。Goを使用するには、AWSLambda関数の作成時にAWSコンソールから言語を選択する必要があります。この章では、Go言語でのAWSLambda関数について詳しく学びましょう。
Goのインストール
開始するには、Go言語のサポートが必要です。このセクションでは、以下の詳細を実行して、GoでAWSLambdaの使用を開始します。これはGoダウンロードの公式サイトです:https://golang.org/dl/
次に、オペレーティングシステムに従ってパッケージをダウンロードします。ここに記載されている手順に従って、それぞれのオペレーティングシステムにGoをインストールします。
Windowsへのインストール
Windowsの場合、32ビットと64ビットのダウンロードが利用可能であることに注意してください。zipファイルをダウンロードして内容を抽出し、選択したディレクトリに保存します。
で利用可能な環境変数を追加します ControlPanel ---> System ---> Advanced system settings.
次に、をクリックします Environment Variables ボタンを押して、ここに示すようにディレクトリパスを追加します-
ここに示すように、システム変数を編集することもできます-
これらの手順が完了すると、Goでの作業を開始できるようになります。コマンドプロンプトを開き、Goコマンドでバージョンを確認します。同じために次のスクリーンショットを観察してください。
LinuxおよびMacOSのインストール
LinuxおよびMacOSにパッケージをインストールするには、以下の手順に従ってください。
パッケージを開梱し、その場所に保管します /usr/local/go。今、追加します/usr/local/go/binPATH環境変数に。それはを使用して行うことができます/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を使用したAWSLambda関数
ビルド時に実行可能ファイルが提供されたときにGoで返されるプログラム。以下は、AWSLambdaをサポートするGoの簡単なプログラムです。インポートする必要がありますgithub.com/aws/aws-lambda-go/lambda、これには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プログラムはメインのラムダから始まります。startは、ハンドラー関数で呼び出されます。以下に示すコードを確認してください-
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
ここで、Goコマンドを使用して上記のファイルを実行し、実行可能ファイルを圧縮してみましょう。
私たちが使用しているファイルの構造は次のとおりです-
と go build、main.exeという実行可能ファイルを作成します。ファイルを圧縮してAWSLambdaにアップロードするには、次の手順を使用できます-
コードWindows / Linux / Macをコンパイルするには、次のコマンドを使用します-
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
次に、AWSコンソールにログインし、を使用してLambda関数を作成します Go ランタイムとして-
関数が作成されたら、上記で作成した実行可能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のAWSLambdaは、コンテキスト用に次のグローバル変数とプロパティを提供します。
MemoryLimitInMB − awslambdaで設定されているメモリ制限(MB単位)。
FunctionName −awsラムダ関数の名前。
FunctionVersion −実行中のawsラムダ関数のバージョン。
LogStreamName −cloudwatchログストリーム名。
LogGroupName −cloudwatchグループ名。
コンテキストで使用可能なプロパティは、以下のように与えられます。
AwsRequestID
これは、AWSLambda関数が呼び出されたときに取得するAWSリクエストIDです。
ClientContext
これには、AWS MobileSDKを介して呼び出されたときのクライアントアプリケーションとデバイスに関する詳細が含まれます。nullにすることができます。クライアントコンテキストは、クライアントID、アプリケーションタイトル、バージョン名、バージョンコード、アプリケーションパッケージ名などの詳細を提供します。
InvokedFunctionArn
呼び出された関数のARN。修飾されていないARNは$ LATESTバージョンを実行し、エイリアスはそれが指している関数バージョンを実行します。
身元
AWSモバイルSDKと併用した場合のAmazonCognitoIDプロバイダーに関する詳細を提供します。
に追加された変更 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)
}
インポートする必要があります log そして lambda contextGoで使用します。コンテキストの詳細は次のとおりです-
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左側にあります。次に、リストでLambda関数を検索して、ログを確認します-
機能エラー
以下のコードに示すように、エラーモジュールを使用してAWSLambdaでカスタムエラー処理を作成できます-
// 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)
}
上記のコードの出力は次のとおりです-