Aws-lambda-function-in-go

提供:Dev Guides
移動先:案内検索

AWS Lambda – Goの機能

Go言語サポートは、AWSに最近追加されたものです。 Goを使用するには、AWS Lambda関数の作成中にAWSコンソールから言語を選択する必要があります。 この章では、Go言語のAWS Lambda関数について詳しく説明します。

Goのインストール

開始するには、Go言語のサポートが必要です。 このセクションでは、GoでAWS Lambdaの使用を開始するために次の詳細を確認します。 これはGoダウンロードの公式サイトです:https://golang.org/dl/

Go Programming

次に、オペレーティングシステムごとにパッケージをダウンロードします。 ここに記載されている手順に従って、Goを各オペレーティングシステムにインストールします。

Windowsへのインストール

Windowsの場合、32ビットおよび64ビットのダウンロードが利用可能であることに注意してください。 zipファイルをダウンロードして内容を抽出し、選択したディレクトリに保存します。

  • ControlPanel --→ System --→ Advanced system settings。*で利用可能な環境変数を追加します。

システムのプロパティ

今、*環境変数*ボタンをクリックし、ここに示すようにディレクトリパスを追加します-

環境変数Go

ここに示すようにシステム変数を編集することもできます-

システム変数の編集

これらの手順が完了すると、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関数を作成します-

APIws Console 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

対応するログ出力は、次のようになります-

ログ出力Go

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

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

関数エラー