aws-lambda-go/cmd/build-lambda-zipをgo get時のエラー


何をしていたか

此方の記事を参考に、sam cliにてgolang, API gateway を試用していたところ、エラーに遭遇しました。

環境

  • windows10 Pro
>sam --version
SAM CLI, version 0.31.0

詳細

ローカル実行は問題無し。API gatewayからRequestしたところ、502エラーが出ました。

もろもろの記事を見ると、build-lambda-zip をbuild時に実行し、zipファイルをS3へuploadすればよさそうです。


build:
        GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o hello-world/hello-world ./hello-world
        ${GOPATH}\bin\build-lambda-zip.exe -o hello-world/hello-world.zip hello-world/hello-world

こちらのbuild-lambda-zip.exe をinstall。

エラー。

>go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip
# github.com/aws/aws-lambda-go/cmd/build-lambda-zip
src\github.com\aws\aws-lambda-go\cmd\build-lambda-zip\main.go:19:17: cannot use cli.StringFlag literal (type cli.StringFlag) as type cli.Flag in array or slice literal:
        cli.StringFlag does not implement cli.Flag (Apply method has pointer receiver)

解決策

  1. go get gopkg.in/urfave/cli.v1
  2. src\github.com\aws\aws-lambda-go\cmd\build-lambda-zip\main.go を下記のように変更
  3. go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip
import (
    "archive/zip"
    "errors"
    "fmt"
    "io/ioutil"
    "os"
    "path/filepath"

    // "github.com/urfave/cli"
    "gopkg.in/urfave/cli.v1"
)

これで問題なくexeファイルが作成されました。

補遺

最後に、makeファイルを変更し、zipファイルをuploadしてあげます。

build:
    GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o hello-world/hello-world ./hello-world
    ${GOPATH}\bin\build-lambda-zip.exe -o hello-world/hello-world.zip hello-world/hello-world
package:
    sam package --template-file template.yaml --output-template-file output-template.yaml --s3-bucket sam-template-store-dev-kubosuke --profile *****

deploy:
    sam deploy --template-file output-template.yaml --stack-name kubosuke --capabilities CAPABILITY_IAM --profile *****

SAMご利用の方は CodeUri: hello-world/hello-world.zip を忘れずに