golangを使用したAmazonラムダ

今年の1月中旬に、AmazonはラムダのGo サポートを発表しました。
素晴らしいニュースですが、今はGolangでコードを書いた経験のないこれらの行を書いているので、記事の執筆と並行して切り株やくぼみを通り抜けて、Goで最初に動作するラムダに行きます。

Goをインストールしてワークスペースをセットアップする


実際には、 Goのインストールを開始する必要があります。 私のマシンはIntelプロセッサー上のWindows 10です。 ここでは複雑なことは何もありません:ダウンロード、実行。 GoがPATH環境変数に<インストールパス> \ binへのパスを登録したことを確認するか、検証のためにcli(cmdなど)を実行します。

プロジェクトフォルダーを作成します。

C:\Users\a_gol\go>cd C:\Go C:\Go>mkdir workspace C:\Go>set GOPATH=C:\Go\workspace C:\Go>cd %GOPATH% C:\Go\workspace> 

コードを編集するには、 Sublime Text 3を使用するため、Goに適合させる必要があります。 これを行うには、 パッケージコントロールをインストールし、それを使用して( 設定->パッケージコントロール->パッケージのインストール-> GoSublime )、 GoSublimeプラグインをダウンロードします。
Sublime Textを再起動します。

Sublime Textの設定の詳細については、 こちらを参照してください

では、最初のHello、worldで Goを試してください


画像

ラムダオンゴー



ラムダを記述してテストしてみましょう。ラムダは、json形式の2つのフィールドから入力オブジェクトを取得し、json形式の応答と成功した完了の識別子を提供します。

リクエスト:

 { "id": 12345, "value": "some-value" } 

答えは:

 { "message": "processed request ID 12345", "ok": true } 

この例は記事で説明されています

 package main import ( "fmt" "github.com/aws/aws-lambda-go/lambda" ) type Request struct { ID float64 `json:"id"` Value string `json:"value"` } type Response struct { Message string `json:"message"` Ok bool `json:"ok"` } func Handler(request Request) (Response, error) { return Response{ Message: fmt.Sprintf("Processed request ID %f", request.ID), Ok: true, }, nil } func main() { lambda.Start(Handler) } 

lambdaのアーカイブを構築するには、 aws-lambda-goライブラリをダウンロードする必要があります。 ここで、Linux、macOS、およびWindowsで実行する必要があるアーカイブを作成する手順を確認できます。

すべてをステップで実行しましょう。

  1. パッケージをダウンロードします。

     go get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip 

  2. cmdを使用して環境変数を設定します。

     set GOOS=linux set GOARCH=amd64 

  3. Goコンソールでは、次のコマンドを実行してアーカイブを収集できます。アーカイブはラムダに展開します(これらのコマンドはWindows用で、他の軸用です )。

     go build -o main main.go %USERPROFILE%\Go\bin\build-lambda-zip.exe -o main.zip main 

これらの手順の後、main.zipアーカイブが表示され、ラムダにダウンロードする必要があります。

画像

AmazonでLambdaを作成する



AWSコンソールからラムダを作成します。
これを行うには、次のものが必要です。

  1. 目的の地域でLambdaサービスを選択します
  2. 関数の作成をクリックします
  3. フィールドに入力します
    画像
  4. 作成後、ラムダコンソールが開きます。Functionコードブロックで、[アップロード]ボタンをクリックしてmain.zipアーカイブをロードする必要があります。 [ハンドラ]フィールドでmainを指定することを忘れないでください。
    画像
  5. コンソールの上部で、[保存]をクリックします。

ラムダをテストします。 これを行うには、コンソールの上部にある[テスト]ボタンをクリックしてテストを作成します。 テスト入力を追加して保存します。

 { "id": 12345, "value": "some-value" } 

画像

[テスト]ボタンをクリックして、コンソールの上部でこのテストスクリプトを呼び出すことができます。

画像

Pot穴



環境変数が設定されていません

 { "errorMessage": "fork/exec /var/task/main: exec format error", "errorType": "PathError" } 

 set GOOS=linux set GOARCH=amd64 

cmdでチェックアウトします:

 echo %GOOS% echo %GOARCH% 


可能性のあるバンプ



1.関数コードブロックの[ハンドラー]フィールドにmainが記述されていません。デフォルトではhelloがあります。

 { "errorMessage": "fork/exec /var/task/hello: no such file or directory", "errorType": "PathError" } 

2.テストjsonが正しく設定されていません。

次のようになります。

 { "id": 12345, "value": "some-value" } 

Source: https://habr.com/ru/post/J351744/


All Articles