Open1

Lambdaのローカル実行で処理が途中で終わってしまう現象 [M1 mac, typescript, esbuild, sam, cloudformation]

下澤健太下澤健太

現象

Lambdaの処理中に外部APIを叩いてもレスポンスがなく途中で処理が終了してしまう

調べた時に同じ現象に直面している人がいなかったため、参考になればと思い、スクラップを残しておきます

下記のような状況の人はこの方法でなおる可能性があります

  • sam local invokeでローカル起動時にこの現象になる
  • ローカル実行時のみ
  • esbuildを使っている
  • M1 macを使っている。M1でのみ確認できる現象。(Intel Macは問題なし)

構成

  • Node
  • Typescript
  • esbuild
  • Lambda
  • Cloudformation
  • Sam

解決方法

typescriptのトランスパイル設定にあるsourcemapをFalseにする

こちらはAWSのデベロッパーガイドからサンプルを拝借しています (サンプルではtrueになっている。)
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello-world/
      Handler: app.handler
      Runtime: nodejs14.x
      Architectures:
        - x86_64
      Events:
        HelloWorld:
          Type: Api 
          Properties:
            Path: /hello
            Method: get
      Environment:
        Variables:
          NODE_OPTIONS: --enable-source-maps
    Metadata:
      BuildMethod: esbuild
      BuildProperties:
        Format: esm
        Minify: false
        OutExtension:
          - .js=.mjs
        Target: "es2020"
        Sourcemap: true <-- これをfalseまたは削除(デフォルト値はfalseのため)
        EntryPoints: 
          - app.ts
        External:
          - "<package-to-exclude>"

AWS デベロッパーガイド:esbuild による Node.js Lambda関数の構築

今度時間があった時に原因を調査してみます。