Goで書かれたAWS Lambdaの容量上限を突破する方法

2023/04/10に公開

症状

serverless-frameworkでLambdaを作成していたとき、ある時点から以下のような表示が出てdeployが通らなくなった。

Unzipped size must be smaller than 262144000 bytes (Service: Lambda, Status Code: 400...

原因

AWS Lambdaには搭載できるソース容量制限250MBの壁があるため。開発量が漸増し、この壁にぶち当たったのが原因。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-limits.html

対応策

Lambda functionごとにバイナリを分けてデプロイする設定をほどこす。

https://www.serverless.com/framework/docs/providers/aws/guide/serverless.yml#package

  1. packageの部分で individually を true にし、(個別デプロイon)
  2. 全てのファイルをzipファイルに含まない設定(patterns '!./**')をし、
  3. 各functionに搭載したいバイナリを個別に指定していく。

書き方の具体例

※なお、この場合はserverless.ymlファイルが存在する同階層に bin ディレクトリを作成し、その下に各種lambdaのバイナリファイルを配置する前提である。

package:
  individually: true # <= 1.個別デプロイOn
  patterns:
    - '!./**' # <= 2.全てのファイルを含めない設定

functions:
  Hello:
    handler: bin/hello
    events:
      - httpApi:
          path: /api/hello
          method: get
    package:
      patterns:
        - ./bin/hello # <= 3.個別に指定

Discussion