2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Prisma プロジェクトを serverless deploy すると Error EPERM: operation not permitted エラーが発生する問題への対処

Last updated at Posted at 2022-05-21

問題

以下の、Prisma 公式の Serverless を使った Lambda へのデプロイ方法の記事を参考にデプロイを試した。
ここで、TSプロジェクトとしてデプロイするため serverless-plugin-typescript を使用している。

しかし、serverless deploy 時に以下のエラーが発生。

Error EPERM: operation not permitted

対処

先ほどの公式記事で、デプロイ時に容量削減のため node_module から余計なモジュールをはじくための設定をするがある。
これは、serverless.yml に以下の項目を追加することで実現している。

package:
  patterns:
    - '!node_modules/.prisma/client/libquery_engine-*'
    - 'node_modules/.prisma/client/libquery_engine-rhel-*'
    - '!node_modules/prisma/libquery_engine-*'
    - '!node_modules/@prisma/engines/**'

しかし、実はこの設定が原因でエラーになっているようだ。これは serverless-plugin-typescript の問題らしい。1
理由はわかっていないが、この上の二つをコメントアウトすることで機能した。

package:
  patterns:
    # - '!node_modules/.prisma/client/libquery_engine-*'
    # - 'node_modules/.prisma/client/libquery_engine-rhel-*'
    - '!node_modules/prisma/libquery_engine-*'
    - '!node_modules/@prisma/engines/**'

ただし、容量は大きくなってしまう...

容量もちゃんと削減したい

Lambda の 50MB 制約もあって、容量削減は結構大事だったりする。

↑の issue でこの問題について精力的にディスカッションされているのでコメントしたところ、容量削減もできる方法をコメントで頂いた。
まだ試せていないが、うまくいくのであればこちらをお勧めする。

方法

まず serverless.yml に以下の項目を追加する。

package:
  individually: true

そして、Prisma を使用しているすべての関数において除外パターンを設定する。

functions: 
  function-name:
    # ...
    package:
      patterns:
        - "!node_modules/.prisma/client/libquery_engine-*"
        - "node_modules/.prisma/client/libquery_engine-rhel-*"
        - "!node_modules/prisma/libquery_engine-*"
        - "!node_modules/@prisma/engines/**"
  1. https://github.com/serverless/serverless-plugin-typescript/issues/219#issuecomment-1032602242

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?