こんにちは。KOUKIです。
とある企業でWeb開発業務をしています。
今日は、Windows環境下で作成したGoファイルをAWSのLambdaにアップロードし、テストを実行した時にpermission deniedが出たよ、という話をします。
<目次>
何をしたか
main.goファイルを作成して、以下のコードを書きました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package main import ( "fmt" "github.com/aws/aws-lambda-go/lambda" ) func main() { lambda.Start(Handler) } func Handler() { fmt.Println("Function invoked!") } |
その後、以下のコマンドでコンパイルし、Windowsの「送る -> Zip」でバイナリデータをZip化しました。
1 2 |
// コンパイルコマンド goes=linux go build -o main |
そして、Lambdaにアップロードしてテストを実行したところ、以下のエラーに遭遇したのです。
1 2 3 4 5 |
{ "errorMessage": "fork/exec /var/task/main: permission denied", "errorType": "PathError" } |
解消方法
permission deniedとあるので、ファイルの実行権限に問題があると思いがちですが、エラーの原因はビルドファイルが正しい方法でコンパイルされていないことでした。
AWS Lambda で動作する .zip を Windows で作成するには、build-lambda-zip ツールのインストールが推奨されているようです。参考リンク
以下のコマンドでインストールできます。
1 |
$ go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip |
次に以下のコマンドを実行して、ビルドファイルをZip化します。
1 |
%USERPROFILE%\Go\bin\build-lambda-zip.exe -output main.zip main |
作成したファイルを使ってテストを実行したところ、無事にテストが成功しました!
おわりに
AWSを使ったことがこれまでなかったんですよね。そのため、LambdaやS3などのサービスを触ることができて、結構ラッキーな職場です。
ガンガンAWSサービスを使いこなしていきたいですね。
それでは、また!
最近のコメント