🎉
AWS Lambda で Go のランタイム選択時のクロスコンパイル
はじめに
AWS Lambda でランタイムに Go 1.x を指定してアーキテクチャを arm64 にすると以下のエラーが表示される。
Runtime go1.x does not support the following architectures [arm64]. Please select different architectures from [x86_64] or select a different runtime.
ランタイムに Go 1.x を指定した場合に arm64 はサポートされていないとのことで、アーキテクチャは x86_64 を選択する必要がある。
M1 Mac を使ってローカル環境で zip を作成する際には以下のコマンドを実行する。
$ GOARCH=amd64 GOOS=linux go build -o hoge
go build コマンド実行時の $GOARCH
と $GOOS
の環境変数について気になったので調べてみる。
$GOARCH
と $GOOS
$GOARCH
はコンパイルアーキテクチャの名前である。
$GOOS
はターゲットオペレーティングシステムの名前である。
クロスコンパイル
対象にするシステム上で実行するには、クロスコンパイルをする必要がある。
クロスコンパイルをする際には $GOARCH
と $GOOS
の環境変数を指定して実行する。
$GOARCH
と $GOOS
の環境変数に指定する値は以下のコマンドから確認ができる。
$ go tool dist list
JSON形式で出力したい場合は以下のコマンドを実行する。
$ go tool dist list -json
おわりに
クロスコンパイルの指定をせずに go build
して zip を AWS Lambda にアップロードして実行すると以下のエラーが表示されたため、気になって調べてみました。
fork/exec /var/task/hoge: exec format error: PathError
これでプロセッサの違いが分かる大人になれたと思います。
Discussion