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)
}

上記のコードの出力は次のとおりです-