LoginSignup
1
1

More than 3 years have passed since last update.

WINDOWS OSでAWS LAMBDAにGOをデプロイ

Posted at

目的

現在、WINDWOS10 OSでGOを用いてWEBサービスを開発しており、
AWS LAMBDAを活用する場面がありましたが、
実際にデプロイを行う際に、無駄にはまったところがあったので、
この度は、実際にデプロイしてみてはまったことや感想を共有したいと思います。

AWS LAMBDAにGOをデプロイする方法

基本的でデプロイする方法はAWSの公式ドキュメントに記載されてあります。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/golang-package.html
特にデプロイパッケージHandlerがデプロイとは密接に関係があるので、
この辺はしっかりと読みましょう。

僕は、しっかり読まずいくつが見逃してしまい、苦労しましたね、、、:joy_cat:

僕がはまったところ

①ソースコードをLINUX用しなかったこと

問題

僕は以前、LAMBDAにPYTHON3をデプロイした経験があります。その際は、OSを気にせずデプロイしてもうまく動いてくれたので、
この度、GOをデプロイする際も、特に意識せず適当にアップロードしましたが、当然なことにエラーになりました。

解決策

LINUXにビルドすれば問題解決です。
AWS LAMBDAは実際にはコンテナ環境のAmazon Linuxの上動作するので、
デプロイするものもこの環境に合わせてビルドしてアップロードしなければならないとのことです。

WINDWOS環境でLINUX用にビルドする方法は、
cmdを用いて、デプロイ対象パスに移動し、
set GOOS=linux ←ビルドオプションをLINUXに設定
go build -o main main.go←ビルド ※このファイル名をLAMBDA操作画面にてハンドラとして入力
build-lambda-zip.exe -output main.zip main←ビルドしたファイルをZIPに圧縮する

build-lambda-zip.exeは
GOPATHから github.com/aws/aws-lambda-go/cmd/build-lambda-zip 入力するとダウンロードできます。

②ハンドラ名入力ミス

問題

LINUX用にビルドして、ZIPファイルをアップロード完了してコードテストを行うと
下のようなエラーメッセージが表示されました。

関数の実行から返された結果が以下のエリアに表示されます。
関数から結果を返す方法の詳細については、こちらを参照してください。

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

☆☆はLAMBDA画面上記載したハンドラに該当します。
1.png

解決策

ビルドしたファイルと、LAMBDA操作画面で入力したハンドラ名が異なるため発生するエラーでした。
例えば、go build -o main main.go でビルドした場合は、ハンドラにmainと入力しないとLambdaがパスを認識できず、エラーになります。
必ずビルドしたファイル名とハンドラ名を統一しましょう。

2.png
僕は「ハンドラ」と記載されてあったため、
lambda.Startに登録するハンドラを書くのかなと思い、
ビルドパス名と異なる値を入力して、はまりました。。。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1