docker環境のlambdaでGo言語(golang)を試す

Go言語
目次

準備

詳しい構築内容は今回省略させていただきます。

下記の記事の内容をまず構築してくだい

しかし、この記事エラーが発生します

そこで今回はエラーを通じて、Gateで言語の理解を深めていきましょう

発生するエラー1:fork/exec /var/task/main: no such file or directory

記事に記載されている通り、次のエラーが発生する

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

原因

mainファイルがないことが原因です。

lambdaはデフォルトだと、go buildで生成されたmainファイルを実行します。

しかし、mainファイルがないためエラーを出しているのです。

そのため、下記のコマンドを実行して、ビルドします。

go build main.go

これでmainファイルが生成されます

発生するエラー2:fork/exec /var/task/main: exec format error

さきほどbuildした結果、mainファイルが生成されました

しかし、下記のエラーが発生します。

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

format errorが発生していることがわかりました。

このエラーは、下記のコマンドでバイナリを作り直せば解消されます。

GOARCH=amd64 GOOS=linux go build main.go

原因

Lambda環境下に合わせた、OS名(GOOS)命令セットアーキテクチャ名(GOARCH)の指定ができていなかったことが原因です。

まず、Go言語の公式ドキュメントに記載されているGOOSとGOARCHの組み合わせを確認します。

lambdaはlinux環境なので、GOOSはlinuxを指定します。そのため、下記の選択肢に絞られます

linux	386
linux	amd64
linux	arm
linux	arm64
linux	loong64
linux	mips
linux	mipsle
linux	mips64
linux	mips64le
linux	ppc64
linux	ppc64le
linux	riscv64
linux	s390x

lambdaの命令セットアーキテクチャを確認すると、amd64を採用されていることがわかりました。

lambdaは、GOOS: linuxGOARCH: amd64環境下で

GOARCH=amd64 GOOS=linux go build main.go

このように、OS名(GOOS)命令セットアーキテクチャ名(GOARCH)の組み合わせが正しくないと、

ビルドしたバイナリは失敗することがわかりました。

参考

ぎゅう
WEBエンジニア
渋谷でWEBエンジニアとして働く。
LaravelとVue.jsをよく取り扱い、誰でも仕様が伝わるコードを書くことを得意とする。
先輩だろうがプルリクにコメントをして、リファクタしまくる仕様伝わるコード書くマン
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次
閉じる