目次
準備
詳しい構築内容は今回省略させていただきます。
下記の記事の内容をまず構築してくだい
Qiita


DockerのLambdaコンテナイメージをgolangで動かしてみた – Qiita
AWSで公開されているgolangのLambdaコンテナイメージを動かしてみました。パッケージの構成├── docker│ └── lambda-go-test│ └── Docke…
しかし、この記事エラーが発生します
そこで今回はエラーを通じて、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ファイルがないためエラーを出しているのです。
Stack Overflow


error “fork/exec /var/task/main: no such file or directory” while executing aws-lambda function
Getting error fork/exec /var/task/main: no such file or directory while executing lambda function.
I am using windows platform to run and build code in Go.
I ha…
そのため、下記のコマンドを実行して、ビルドします。
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 関数の命令セットアーキテクチャの選択と設定 – AWS Lambda
Lambda 関数に ARM64 または x86 命令セットアーキテクチャを選択して設定する方法について説明します。
lambdaは、GOOS: linux、GOARCH: amd64環境下で
GOARCH=amd64 GOOS=linux go build main.go
このように、OS名(GOOS)と命令セットアーキテクチャ名(GOARCH)の組み合わせが正しくないと、
ビルドしたバイナリは失敗することがわかりました。
コメント